[英]How can I recieve/send multiple messages at the same time in python? (Python Multithreading)
[英]How to send and recieve messages at the same time python sockets
我正在嘗試學習套接字編程,目前有以下server
和client
代碼,但問題是服務器和/或客戶端無法同時發送和接收消息,他們輪流發送和接收消息。
我看過下面的例子,但答案似乎並沒有解決問題,或者我跟錯了。
服務器
import socket
import threading
s = socket.socket()
host = socket.gethostname()
port = 8080
s.bind((host, port))
s.listen(1)
print("Waiting for connections")
conn, addr = s.accept()
print("Client has connected")
conn.send("Welcome to the server".encode())
def recv_msg():
while True:
recv_msg = conn.recv(1024)
if not recv_msg:
sys.exit(0)
recv_msg = recv_msg.decode()
print(recv_msg)
def send_msg():
send_msg = input(str("Enter message: "))
send_msg = send_msg.encode()
conn.send(send_msg)
print("message sent")
while True:
send_msg()
t = threading.Thread(target=recv_msg)
t.start()
客戶
import socket
import threading
s = socket.socket()
host = socket.gethostname()
port = 8080
s.connect((host, port))
print("Connected to the server")
message = s.recv(1024)
message = message.decode()
print(message)
def recv_msg():
while True:
recv_msg = s.recv(1024)
if not recv_msg:
sys.exit(0)
recv_msg = recv_msg.decode()
print(recv_msg)
def send_msg():
send_msg = input(str("Enter message: "))
send_msg = send_msg.encode()
s.send(send_msg)
print("Message sent")
while True:
send_msg()
t = threading.Thread(target=recv_msg)
t.start()
我最終正在嘗試創建一個類似於 Whatsapp/Imessage 等的聊天應用程序(使用 kivy),我還沒有找到有關如何執行此操作的教程(我見過的所有教程都是關於創建聊天室的)所以如果有人看過那將不勝感激。
在客戶端和服務器中,您必須在運行循環之前啟動線程, while True: send_msg()
t = threading.Thread(target=recv_msg)
t.start()
while True:
send_msg()
編輯:
服務器.py
import socket
import threading
import sys
# --- functions ---
def recv_msg():
while True:
recv_msg = conn.recv(1024)
if not recv_msg:
sys.exit(0)
recv_msg = recv_msg.decode()
print(recv_msg)
def send_msg():
while True:
send_msg = input(str("Enter message: "))
send_msg = send_msg.encode()
conn.send(send_msg)
print("message sent")
# --- main ---
host = socket.gethostname()
port = 8080
s = socket.socket()
s.bind((host, port))
s.listen(1)
print("Waiting for connections")
conn, addr = s.accept()
print("Client has connected")
conn.send("Welcome to the server".encode())
# thread has to start before other loop
t = threading.Thread(target=recv_msg)
t.start()
send_msg()
客戶端.py
import socket
import threading
import sys
# --- functions ---
def recv_msg():
while True:
recv_msg = s.recv(1024)
if not recv_msg:
sys.exit(0)
recv_msg = recv_msg.decode()
print(recv_msg)
def send_msg():
while True:
send_msg = input(str("Enter message: "))
send_msg = send_msg.encode()
s.send(send_msg)
print("Message sent")
# --- main ---
host = socket.gethostname()
port = 8080
s = socket.socket()
s.connect((host, port))
print("Connected to the server")
message = s.recv(1024)
message = message.decode()
print(message)
# thread has to start before other loop
t = threading.Thread(target=recv_msg)
t.start()
send_msg()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.