【发布时间】:2013-05-05 08:50:46
【问题描述】:
以下receiveFile() 函数从套接字读取文件名和文件数据,并使用分隔符$ 将其拆分。
但我无法关闭套接字并引发Bad file descriptor 错误。如果我注释掉self.server_socket.close() 语句,那么不会有错误,但套接字会一直在监听。
代码:-
def listen(self):
self.server_socket.listen(10)
while True:
client_socket, address = self.server_socket.accept()
print 'connected to', address
self.receiveFile(client_socket)
def receiveFile(self,sock):
data = sock.recv(1024)
data = data.split("$");
print 'filename', data[0]
f = open(data[0], "wb")
#data = sock.recv(1024)
print 'the data is', data[1]
f.write(data[1])
data = sock.recv(1024)
while (data):
f.write(data)
data=sock.recv(1024)
f.close()
self.server_socket.close()
print 'the data is', data
print "File Downloaded"
追溯:-
Traceback (most recent call last):
File "server.py", line 45, in <module>
a = Server(1111)
File "server.py", line 15, in __init__
self.listen()
File "server.py", line 20, in listen
client_socket, address = self.server_socket.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')
socket.error: [Errno 9] Bad file descriptor
【问题讨论】:
-
错误可能不是来自该代码,而是无论您在哪里调用
self.server_socket.accept()- 都会有助于包含更多代码和完整的回溯。 -
那么,您是希望服务器在收到文件后关闭,还是只想关闭活动连接?
-
@aya 在这段代码中我试图在收到文件后关闭服务器。