我正在尝试学习套接字编程,当前具有以下server
和client
代码,但是问题是服务器和/或客户端无法同时发送和接收消息,他们轮流发送和接收消息。
我看了以下示例,但答案似乎无法解决问题,或者我听错了。
Python Socket - Send/Receive messages at the same time
服务器
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),但我还没有找到有关如何执行此操作的教程(我看到的所有内容都是关于创建一个聊天室),因此,如果有人看过,我们将不胜感激。
答案 0 :(得分:0)
在客户端和服务器中,必须先运行线程,然后再运行循环while True: send_msg()
t = threading.Thread(target=recv_msg)
t.start()
while True:
send_msg()
编辑:
server.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()
client.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()