2017-06-23 5 views
0

クライアントモジュールと接続しているネットワークモジュールで作業しています。 次のようにサーバーのコードは次のようにプログラムを正常に実行できません。「エラー:アドレスはすでに使用中です。」

import socket 

def Main(): 
    host = '127.0.0.1' 
    port = 5000 

    s = socket.socket() 
    s.bind((host,port)) 

    s.listen(1) 
    c, addr = s.connect() 
    print "Connection from: " + str(addr) 
    while True: 
     data = c.recv(1024) 
     if not data: 
      break 
     print "from connected user: " + str(data) 
     data = str(data).upper() 
     print "sending: " + str(data) 
     c.send(data) 
    c.close() 

if __name__ == '__main__': 
    Main() 

クライアントコードは次のとおりです。

import socket 

def Main(): 
    host = '127.0.0.1' 
    port = 5000 

    s = socket.socket() 
    s.connect((host, port)) 

    message = raw_input("-> ") 
    while message != 'q': 
     s.send(message) 
     data = s.recv(1024) 
     print 'Received from server: ' + str(data) 
     message = raw_input("-> ") 
    s.close() 

if __name__ == '__main__': 
    Main() 

ではなく、プログラムを正常に実行することができ、既に使用中のエラーアドレスを提供します。

答えて

0

問題のポートを使用できない場合は、通常、以前のバインディングでソケットが正しく閉じられていないことが原因です。ホストポートを5000から別のもの、たとえば12345に変更することで問題を解決できます。

さらに、コードに別のバグがあります。クライアントからの接続を受け入れる場合、サーバはconnect()の機能ではなく、s.accept()の機能を呼び出す必要があります。

import socket 

def Main(): 
    host = '127.0.0.1' 
    port = 12345 

    s = socket.socket() 
    s.bind((host,port)) 

    s.listen(1) 
    c, addr = s.accept() 
    print "Connection from: " + str(addr) 
    while True: 
     data = c.recv(1024) 
     if not data: 
      break 
     print "from connected user: " + str(data) 
     data = str(data).upper() 
     print "sending: " + str(data) 
     c.send(data) 
    c.close() 

if __name__ == '__main__': 
    Main() 

...、

$ Server.py 
Connection from: ('127.0.0.1', 64666) 
from connected user: hello 

Client.py:

import socket 

def Main(): 
    host = '127.0.0.1' 
    port = 12345 

    s = socket.socket() 
    s.connect((host, port)) 

    message = raw_input("-> ") 
    while message != 'q': 
     s.send(message) 
     data = s.recv(1024) 
     print 'Received from server: ' + str(data) 
     message = raw_input("-> ") 
    s.close() 

if __name__ == '__main__': 
    Main() 

正しい構文は

c, addr = s.accept() 

Server.pyです。 ..

$ Client.py 
-> hello 
Received from server: HELLO 
-> 
0

コマンドnetstatコマンドの-nlpを使用し、上記見つけるにはlist.Youにポートを言及するか、また、同じポートとcorrosponding PIDを見つけ殺すことによって、そのプロセスをkill -9たりしますそれぞれのコードに行き、ポート番号を変更してください。

第2に、 '127.0.0.1'の代わりにlocalhostを使用することをお勧めします。 また、このコード 'c、addr = s.connect()'の代わりにサーバーコードにも問題があります。これは 'c、addr = s.connect()'と書く必要があります。着信接続を確認してから接続してください。着信接続が受け入れられていません。

関連する問題