2016-09-12 11 views
0

サーバとクライアントでソケットを作成するための基本プログラムを書きました。しかし問題は、コードを実行すると、通常は各ソケットアドレスの1つの使用しか許可されていないというエラーが表示されることです。だから私は問題がポートに起因すると思う、私はポートを変更し、まだ動作しません。これをどのように機能させるには?通常は各ソケットアドレスの1つの使用しか許可されていませんPython

これは私のコードです:あなたの助けのための

サーバー

import socket 
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
sock.bind(('localhost',3200)) 
sock.listen(1) 
print "Server is ready to receive data..." 
client, address = sock.accept() 
msg = client.recv(1024) 
print msg 

クライアント

import socket 
connection_to_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
connection_to_server.bind(('localhost',3200)) 
msg = raw_input("Please enter a content :") 
connection_to_server.send(msg) 

ありがとう!

答えて

2

ここでは、ソケットがどのように機能するのかという基本的な誤解があると思います。

socket.bind()コールは、特定のインターフェイス上の特定のポートにバインドするために使用され、ペアは、ネットワーク・アドレスを使用して、指定された(127.0.0.1)上のポート8080にバインドします。あなたが入ってくるの読み込みを開始する前に、サーバ側でこれを実行する必要があります特定のソケットで "リスニング"することができます。サーバーだけがこれを行う必要があります。クライアントはsocket.connectを使用してこのソケットに接続します。

スペクトラがコメントで指摘したように、特定のインターフェイス/ポートの組み合わせを介して通信することができます。これはほとんどの場合、サーバーに必要ですが、常にクライアントではありません。両方は、同じインタフェース上の同じポートにアクセス/バインドしているので、そうするのはほとんど意味がありません。

クライアントとサーバーの両方で、同じソケットでリッスンを開始しようとしています。これは、エラーメッセージに示されているとおり、許可されていません。

さらに進む前に、Socket Programming HOWTOを通過する必要があります。むしろより

> connection_to_server.bind(('localhost',3200)) 

+0

Socket.bindは、任意のリスニングを開始していない、それだけでその名前が示すものを行います。特定のインターフェイスおよび/またはポートにソケットのローカル側を結合します。たとえば、サーバーが着信接続が特定のポートから来ることを期待している場合など、クライアントソケットでの使用があります。接続する前に 'getsockname'でどのポートが割り当てられているか知りたい場合には、' sock.bind(( "'、0))を呼び出して接続前に自動割り当てを強制することもできます。 – spectras

+0

ああ、申し訳ありませんが、私はこの特定のモデルで何が起こっているのかを説明しようとしました。サーバーがソケットにバインドする前にソケットに入ってくるすべてのデータを読み取って、「リッスンする」必要があります。私はそれをより技術的に正しい/明白にするために修正します。 – ffledgling

0

あなたはSOCK_STREAMソケットの場合

connection_to_server.connect(('localhost',3200)) 
0

を持っている必要があり、クライアントが接続する必要があり、結合していません。 Sockets HOWTOから:

import socket 
connection_to_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
connection_to_server.connect(('localhost',3200)) 
msg = raw_input("Please enter a content :") 
connection_to_server.send(msg) 
関連する問題