teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/08/17 03:55

投稿

otn
otn

スコア86363

answer CHANGED
@@ -3,4 +3,20 @@
3
3
  日本語が間違っていて、クライアントを作るのであれば、
4
4
  どちらのポートで待ち受けているか分からないサーバーにクライアントとして接続しに行くので有れば、その方法しか無いので、スレッドを分けてそれぞれで接続に行くくらいでしょうか。
5
5
 
6
- それとも日本語が正しい場合は、`connect`じゃなくて`bind`と`listen`で同時に2つのポートで待ち受けられます。
6
+ それとも日本語が正しい場合は、`connect`じゃなくて`bind`と`listen`で同時に2つのポートで待ち受けられます。
7
+
8
+ #追記
9
+ クライアントから、サーバーにあらかじめTCPコネクションを2つ張っておいて、
10
+ 両方のコネクションを同時に受信チェックしたいということのようですね。
11
+
12
+ `select`を使って入力のあるソケットを教えてもらうのが簡単です。
13
+
14
+ ```Python
15
+ import select
16
+
17
+ socks = select.select([socket1,socket2],[],[])[0]:
18
+ for sock in socks:
19
+ data = sock.recv(1024)
20
+ print(f"ポート {sock.getsockname()[1]} から返ってきた")
21
+ ```
22
+ 必要に応じて、第4引数でタイムアウト値を指定して下さい。タイムアウト時は`socks`が空リストになります。