[英]bad file descriptor python socket
即时通讯试图使一个udp服务器只接受数据,而不接收回客户端,并且我有此问题,我不知道是什么原因导致此错误的文件描述符,这是服务器代码:
import threading
import socket
import logging
class Broker():
def __init__(self):
logging.info('Initializing Broker')
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.bind(('', 6668))
self.clients_list = []
def talkToClient(self, ip):
#logging.info("Sending 'ok' to %s", ip)
print ("Buat Thread Baru")
while True:
try:
data = self.sock.recv(1024)
if data:
# Set the response to echo back the recieved data
response = data
self.sock.send(response)
else:
raise error('Client disconnected')
except:
self.sock.close()
return False
self.sock.sendto("ok", ip)
def listen_clients(self):
while True:
msg, client = self.sock.recvfrom(1024)
self.sock.settimeout(20)
logging.info('Received data from client %s: %s', client, msg)
t = threading.Thread(target=self.talkToClient, args=(client,))
t.start()
if __name__ == '__main__':
# Make sure all log messages show up
logging.getLogger().setLevel(logging.DEBUG)
b = Broker()
b.listen_clients()
UDP是无连接的,因此在您的线程代码中,永远无法Client disconnected
的错误。 但是对于任何其他错误(在您的情况下,可能是socket.timeout
),套接字已关闭。 随后,在您的主程序中出现了一个bad filedescriptor
错误。
如果要在线程中超时,则需要打开一个新的套接字。 而且,您还必须向客户端发送问候消息,以便他知道用于一对一通信的新端口。
另请注意:UDP不可靠。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.