Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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_Tcp - Fatal编程技术网

Python套接字编程-错误的文件描述符错误

Python套接字编程-错误的文件描述符错误,python,sockets,tcp,Python,Sockets,Tcp,我正在尝试创建一个简单的服务器,并在空闲时不断出现以下错误: 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 de

我正在尝试创建一个简单的服务器,并在空闲时不断出现以下错误:

  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
这是我的密码。我试着理解原因,这与关闭一个插座然后再次尝试使用它有关,但我真的不知道该如何修复它。感谢所有帮助。:)

您试图使用“message”变量数据,而不检查其是否为空。 我想这可能就是问题所在

试试这个:

from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
port=10101
serverSocket.bind(('localhost',port))
serverSocket.listen(5)
while True:
    print('Ready to server')
    connectionSocket, addr = serverSocket.accept()
    try:
                message = connectionSocket.recv(1024)
                if message != "": #Checking if empty
                    filename = message.split()[1]
                    f = open(filename[1:])
                    outputdata = f.read()
                    connectionSocket.send("HTTP/1.1 200 OK\r\n\n")
                    for i in range(0, len(outputdata)):
                        connectionSocket.send(outputdata[i])
                    connectionSocket.close()
    except IOError:
            connectionSocket.send('HTTP/1.1 404 File not found\r\n\n')
            connectionSocket.close()
            serverSocket.close()
有几件事:

当user27994550输入代码时,您想使用

 message = connectionSocket.recv(1024)
接收消息,而不是服务器套接字

你两个密码都漏掉的另一件事是你不想打电话

serverSocket.close()
在except函数中,除非关闭整个程序。如果关闭服务器套接字,则下次调用时

connectionSocket, addr = serverSocket.accept()

您将无法接受另一个连接。希望这有帮助

对套接字进行了修订,现在所有内容都以字节为单位。检查以确保文件名不需要转换为字符串
connectionSocket, addr = serverSocket.accept()