Pythonでソケット通信の処理を行いたいのですが、2点質問があります。
質問1
数回に一回OSError: [Errno 48] Address already in use
のエラーが出てしまいます。
常に出るわけでは無いので、原因がわからないです。
お手数ですが、ご教示いただきたいです。
サーバ側を実行した際にエラーが出るのでサーバ側の設定に問題があるように思います。
※サーバ側とクライアント側の書き方が異なるのは、別サイトを参考にしたためです
Python
1import socket 2 3def socket_make(ip, port): 4 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 5 s.bind((ip, port)) 6 s.listen(1) 7 while True: 8 print("待機中....") 9 param = "" 10 conn, addr = s.accept() 11 conn.send("test".encode()) 12 data = conn.recv(4096) 13 14 print('{}/ {}'.format(data, addr)) 15 16 if not data : 17 break 18 19 param = "レスポンス:" + data.decode() 20 21 # ソケットを閉じる 22 conn.close() 23 s.close() 24 25 return param 26 27print("test1:"+socket_make("127.0.0.1", 8888)) 28print("test2:"+socket_make("127.0.0.1", 8888))
Python
1import socket 2 3class Client: 4 def __init__(self): 5 self.server_ip = "127.0.0.1" 6 self.server_port = 8888 7 self.socket_make(self.server_ip, self.server_port) 8 9 def socket_make(self, ip, port): 10 self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 11 self.s.connect((ip, port)) 12 data = self.s.recv(4096) 13 print(data) 14 self.s.send(b"RESPONSE!!!!!!") 15 16 self.s.close() 17 18client = Client()
上手くいく場合
待機中.... b'RESPONSE!!!!!!'/ ('127.0.0.1', 55268) test1:レスポンス:RESPONSE!!!!!! Waiting.... b'RESPONSE!!!!!!'/ ('127.0.0.1', 55269) test2:レスポンス:RESPONSE!!!!!!
失敗する場合
待機中.... b'RESPONSE!!!!!!'/ ('127.0.0.1', 55270) test1:レスポンス:RESPONSE!!!!!! Traceback (most recent call last): File "teratailServer.py", line 28, in <module> print("test2:"+socket_make("127.0.0.1", 8888)) File "teratailServer.py", line 5, in socket_make s.bind((ip, port)) OSError: [Errno 48] Address already in use
s.listen(1)
としているので、1つのクライアントしかアクセスできなくなっている
ということかな、とも思ったのですがもしこれが原因ならば
そもそも成功しないのでは、、と思うので確信が持てずにいます。
質問2
Python
1 # ソケットを閉じる 2 conn.close() 3 s.close()
上記の部分なのですが、サイトによって書いていたり書いていなかったりします。
return
を入れているので不要なのでしょうか。
それとも、どちらかはclose
すべきor両方close
すべきなのでしょうか。
やりたいこととしては、2回データを取得した後は接続断したいです。
調べたのですがイマイチ理解ができませんでした。
合わせて教えていただきたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー