ソケットを使用してサーバー/クライアント接続を確立しようとしています。しかし、それらは適切に閉じず、その理由について頭を悩ませることはできません。
更新 1
質問で s.close 関数を実際に呼び出していないという私の愚かな間違いを修正しました。しかし、これは私の問題ではないことが判明しました。
アップデートの終了
これは私のサーバーコードです:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
if __name__ == '__main__':
# Server connection
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
print 'Server started!'
print 'Waiting for clients...'
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
msg = c.recv(1024)
print addr, ' >> ', msg
if msg == 'close':
print 'Closing down'
c.send('SENT: Closing down')
c.shutdown(socket.SHUT_RDWR)
c.close()
これは私のクライアントコードです:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
if __name__ == '__main__':
# Server
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
print 'Connecting to ', host, port
s.connect((host, port))
msg = raw_input('CLIENT >> ')
s.send(msg)
msg = s.recv(1024)
print 'SERVER >> ', msg
s.close() # Close the socket when done
そして、これはそれが生成するエラーメッセージです:
In [13]: %run cjboxd.py
Server started!
Waiting for clients...
---------------------------------------------------------------------------
error Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
173 else:
174 filename = fname
--> 175 __builtin__.execfile(filename, *where)
/home/nine/slask/cjboxd.py in <module>()
19 print 'Waiting for clients...'
20
---> 21 s.bind((host, port)) # Bind to the port
22 s.listen(5) # Now wait for client connection.
23 c, addr = s.accept() # Establish connection with client.
/usr/lib/python2.7/socket.pyc in meth(name, self, *args)
222
223 def meth(name,self,*args):
--> 224 return getattr(self._sock,name)(*args)
225
226 for _m in _socketmethods:
error: [Errno 98] Address already in use
1分後に動作します。