Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时Python服务器聊天问题_Python_Sockets_Python 2.7_Networking_Network Programming - Fatal编程技术网

运行时Python服务器聊天问题

运行时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

我一直在编写聊天程序,但后来出现了一个错误,导致服务器崩溃,因此下次我将无法使用相同的端口,因此再次运行时会出现socket.bind错误。如何修复? 源代码:

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()