2016-08-15 13 views
0

私は、ラップトップでPythonを使ってソケット通信をテストしようとしています。しかし、私はなぜ接続が確立されていないのか分からないのですか?私はターゲットマシンが積極的に接続を拒否しているエラーを続けています。私は、クライアントとサーバーの両方の部分を実行するために同じコンピュータを使用しようとしています。サーバーは正常に動作していますが、クライアントは接続していません。私はホスト名が間違っていると思う(127.0.0.1)が、私は何を使用しているはずですか?また、サーバーホスト名を(0.0.0.0)に変更しようとしましたが、クライアントが接続しようとしていたホスト名のIPV4アドレスも変更されましたが、どちらも動作しませんでした。どんな助けもありがとう!同じコンピュータ上でクライアントとサーバをテストする

私のコード(サーバ部分):

import socket 

comms_socket =socket.socket() 
comms_socket.bind(('127.0.0.1', 50000)) 
comms_socket.listen(10) 
connection, address = comms_socket.accept() 

while True: 
    print(connection.recv(4096).decode("UTF-8")) 
    send_data = input("Reply: ") 
    connection.send(bytes(send_data, "UTF-8")) 

クライアント部分:

import socket 

comms_socket = socket.socket() 
comms_socket.connect(('127.0.0.1',50000)) 

while True: 

    send_data = input("Message: ") 
    comms_socket.send(bytes(send_data, "UTF-8")) 
    print(comms_socket.recv(4096).decode("UTF-8")) 
+0

問題を再現できません、あなたのコードは私のマシン上で正常に動作します。 (ウィンドウズ7、Python 3.5)。あなたのコードがソケットを開くのを妨げている何らかの形のファイアウォールがインストールされているかどうか確認してください。また、これを実行しているOSは何ですか? –

+0

このコードは私にとってもうまくいきます。ところで、通常のパターンは、サーバに空の文字列( '' '')で示される任意のアドレス( 'INADDR_ANY')をリッスンさせることです。それから、ローカルホストインタフェース( '127.0.0.1')やIPアドレスを持つ他のインタフェース経由でメッセージを受信します。クライアントは常に 'connect'に明示的なアドレスを与えなければなりません。 –

+0

私はWindows 10、python 3.5を使用しています。私はPythonシェルで実行していたときに問題を起こしていたのはIDLEだと思います。私が直接走った時、プログラムはうまくいった。助けてくれてありがとう –

答えて

0

input()であるため違いにより、パイソン2 *では動作しませんあなたのコード、raw_input()bytes 、など。* vs python 2. *。 python 2. *で作業するには、最小限の変更が必要です。

Serverプログラムは:

import socket 

comms_socket =socket.socket() 
comms_socket.bind(('127.0.0.1', 7000)) 
comms_socket.listen(10) 
connection, address = comms_socket.accept() 

while True: 
    print(connection.recv(4096).decode("UTF-8")) 
    send_data = raw_input("Reply: ") # Use raw_input() instead of input() 
    connection.send(send_data.encode("UTF-8")) 

クライアントプログラムは:あなたは、特定のユースケースで意図したとおりにbytesを使用したい場合は

import socket 


comms_socket = socket.socket() 
comms_socket.connect(('127.0.0.1',7000)) 

while True: 

    send_data = raw_input("Message: ") 
    comms_socket.send(send_data.encode("UTF-8")) 
    print(comms_socket.recv(4096).decode("UTF-8")) 

、あなたが使用する必要がありますそうでなければ、あなたのコードを実行するためのpython 3を使用しますPython 2.6以降ではなく、bytesarrayです。これを確認してください:the bytes type in python 2.7 and PEP-358

+0

私はPython 3を使っていますが、もともとはIDLEのPythonシェルを使っていましたが、動作しませんでした。しかし、私がまっすぐ走ると、彼らは仕事をします。 IDLEとは何か? –

関連する問題