【发布时间】:2017-09-12 12:56:55
【问题描述】:
我是 Python 的初学者,今天我尝试创建一个简单的聊天程序。到目前为止,它并没有太糟糕,但我无法在服务器和客户端之间进行通信。我只能从服务器发送到客户端,但不能从另一个方向发送。我尝试了多线程,结果如下:
服务器:
import socket
import threading
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 4444
s.bind((host, port))
s.listen(3)
conn, addr = s.accept()
print("Connection from: "+str(addr[0])+":"+str(addr[1]))
def recv_data():
while True:
data = s.recv(2048).decode('utf-8')
print(data)
def send_data():
while True:
msg = input(str(socket.gethostname())+"> ")
msg = str(host + "> ").encode('utf-8') + msg.encode('utf-8')
conn.send(msg)
#t1 = threading.Thread(target=recv_data)
t2 = threading.Thread(target=send_data)
#t1.start()
t2.start()
客户:
import socket
import threading
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 4444
s.connect((host, port))
print("Connected to: "+ host)
def recv_data():
while True:
data = s.recv(2048)
data = data.decode('utf-8')
print(data)
def send_data():
while True:
msg = input(str(host)+"> ").encode('utf-8')
s.send(msg)
t1 = threading.Thread(target=recv_data)
#t2 = threading.Thread(target=send_data)
t1.start()
#t2.start()
此代码有效;服务器可以发送,客户端可以接收,但是每当我取消注释第二个线程,以便它可以同时执行这两个线程时,我都会收到错误消息:
OSError: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
我似乎找不到解决方案,所以请帮忙,我做错了什么? :D
【问题讨论】:
-
我不是专家,但是您是否尝试过为两个通信方向使用两个不同的套接字(在不同的端口上)?
标签: python multithreading python-3.x sockets chat