1

ソケットがどのように機能するのか理解していないので、誰かが助けてくれるかもしれません。次の例では、「Sent Hello. Received: Hello to you!」と出力して永遠にループすると思いましたが、実際には 2 回ループしてからハングします。タイムアウト、ピアによる接続のリセットなどはありません。ハングするだけです。

import socket

socket_list = []
for i in range(60000, 60002):
    soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    soc.connect("",i)
    socket_list.append(soc)

while True:
   for soc in socket_list:
        soc.sendall("Hello.")
        msg = soc.recv(1024)
        print "Sent Hello. Received:",msg

接続の反対側のコードは次のとおりです。

import socket
soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
soc.bind("localhost",6000x)
while True:
   soc.listen(1)
   conn, addr = soc.accept()
   msg = conn.recv(1024)
   if msg == "Hello":
       conn.sendall("Hello to you!")
4

1 に答える 1

1
for i in range(60000, 60002):
    soc.connect("",i)

クライアント プログラムでは、起動時に 2 つのソケットを開き、プログラムの存続期間中、それらのソケットを使用します。

while True:
   conn, addr = soc.accept()

サーバープログラムaccept()では、メインループの反復ごとに新しい接続を繰り返します。これにより、各ポートで最初の接続が正常に受け入れられ、recv/send サイクルが 1 回実行された後、最初からやり直して、既存のソケットを使用し続けるのではなく、新しい接続を受け入れようとします。

プログラムの 1 つを変更する必要があります。クライアント プログラムがwhile ループ内でsocket()andを呼び出す必要があるか、サーバー プログラムが while ループの外でand呼び出しconnect()を移動する必要があります。listen()accept()

于 2012-10-05T01:35:14.633 に答える