次のreceiveFile()
関数は、ソケットからファイル名とファイルデータを読み取り、デリミタ$
を使用してそれを分割します。Pythonソケット(ソケットエラーBad File Descriptor)
しかし、ソケットを閉じることができず、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
これは、ファイルが受信された後にサーバーをシャットダウンするか、アクティブな接続を閉じるだけですか? – Aya
このコードで@ayaファイルが受信されると、サーバーをシャットダウンしようとしています。 –