运行时Python服务器聊天问题
我一直在编写聊天程序,但后来出现了一个错误,导致服务器崩溃,因此下次我将无法使用相同的端口,因此再次运行时会出现socket.bind错误。如何修复? 源代码:运行时Python服务器聊天问题,python,sockets,python-2.7,networking,network-programming,Python,Sockets,Python 2.7,Networking,Network Programming,我一直在编写聊天程序,但后来出现了一个错误,导致服务器崩溃,因此下次我将无法使用相同的端口,因此再次运行时会出现socket.bind错误。如何修复? 源代码: import socket from threading import Thread def clientHandler(): conn, addr = sock.accept() print addr, "is Connected" while 1: data = conn.recv(1024
import socket
from threading import Thread
def clientHandler():
conn, addr = sock.accept()
print addr, "is Connected"
while 1:
data = conn.recv(1024)
if not data:
break
print "Received Message", repr(data)
HOST = ''
PORT = raw_input('PORT: ')
PORT = int(PORT)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(5)
print "Server is running......"
#Thread(target=clientHandler).start()
#Thread(target=clientHandler).start()
#Thread(target=clientHandler).start()
for i in range(5):
Thread(target=clientHandler).start()
sock.close()
情况就是这样:
Server is running......
Exception in thread Thread-5:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File "C:/Users/Judicaël/Desktop/server_test.py", line 5, in clientHandler
conn, addr = sock.accept()
File "C:\Python27\lib\socket.py", line 202, in accept
sock, addr = self._sock.accept()
File "C:\Python27\lib\socket.py", line 170, in _dummy
raise error(EBADF, 'Bad file descriptor')
error: [Errno 9] Bad file descriptor
>>> ==================================================== RESTART ====================================================
>>>
Traceback (most recent call last):
File "C:/Users/Judicaël/Desktop/server_test.py", line 15, in <module>
sock.bind((HOST, PORT))
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
现在如何将收到的消息发送给所有客户端?您必须在服务器端调用的功能如下: -创建一个套接字 -将其绑定到端口 -听 -接受 -处理客户沟通 您有多个接受线程。然后关闭套接字,使所有接受都失败。 正确的方法是
while True:
client, addr = sock.accept()
Thread(target=clientHandler, args=(client, addr)).start()
您可以在一段时间后重新使用该端口。要立即重用它:sock.setsockoptsocket.SOL_SOCKET,SOCKET.SO_REUSEADDR,1非常有效!我将添加什么来向所有客户端发送收到的消息@丹尼尔
while True:
client, addr = sock.accept()
Thread(target=clientHandler, args=(client, addr)).start()