Можете ли вы вызвать функцию на recv? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать приложение для обмена сообщениями, используя tkinter в качестве GUI. Я хочу вызывать функцию, когда получаю сообщение, эта функция на самом деле отображает сообщение, но используя некоторое время l oop, она может иногда обработать sh или испортить обновления на моем GUI.

* 1002. * Я попытался вызвать подпрограмму после того, как я подключился к серверу ...
def get_msg(): # This will run code that will get messages
    while True:
        Crecv = clientsocket.recv(1024).decode() # Waits for a message
        print(Crecv) # Prints whatever the server has sent into console
        messages.insert(END, Crecv) # Insets the message into the message Listbox  

Это не сработало, я предположил, что это из-за того, что l oop (как я бы просто сделал * 1026) * после подключения)

Теперь я хочу попробовать вызвать подпрограмму только при получении сообщения.

Вот мой скрипт server.py

from socket import *
import socket
import select

## -- Server (Rooms) -- ##
users = []
addresses = []

host_name = socket.gethostname()

HOST = socket.gethostbyname(host_name) 
PORT = 12345

print(f"Server Info\nHOST: {HOST}\nPORT: {PORT}")


serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((HOST, PORT))
serversocket.listen(5)
clientsocket, address = serversocket.accept()

def user_join():
    # Append username to users[]
    # Append user address to adresses[]
    print(f"{address} connecting (nicked {username})")
    clientsocket.send(f"{username} joined the room!").encode()

print(address)
with clientsocket:
    while True:
        Srecv = clientsocket.recv(1024).decode()
        print(f"{address}: {Srecv}")
        # Add server time to message before sending
        clientsocket.sendall(Srecv.encode())

Это то, что я будет обновляться позже, поэтому есть несколько неиспользуемых списков и т. д. c.

Идея состоит в том, что .... Клиент подключается к серверу -> Клиент отправляет сообщение -> server.py декодирует сообщение и затем отправьте его всем, кто подключен -> OP Client повторно получит сообщение и отобразит его, другие клиенты просто получат сообщение и отобразят его.

Это то, чего я пытаюсь достичь на конец проекта, но я не могу даже Подключитесь к серверу, когда мой клиент выйдет из строя, как только я подключусь.

Я скопировал весь свой код сокета из не GUI версии моего проекта под названием client.py

from socket import *
import socket

## -- Server (Room) -- ##
host = input("Host: ")
port = int(input("Port: "))

username = input("Username: ")
username = "<" + username + ">"
print(f"Connecting under nick \"{username}\"")

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Creates socket
clientsocket.connect((host, port)) # Connects to the server

while True:
    Csend = input("MSG: ") # Input message
    #Csend = f"{username} {Csend}" # Add username to message
    clientsocket.send(Csend.encode()) # Send message to ONLY the server

    print(clientsocket.recv(1024).decode())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...