4

サーバ

import socket
import sys
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

host= 'VAC01.VACLab.com'
port=int(2000)
s.bind((host,port))
s.listen(1)

conn,addr =s.accept()

data=s.recv(100000)

s.close

クライアント

import socket
import sys

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

host="VAC01.VACLab.com"
port=int(2000)
s.connect((host,port))
s.send(str.encode(sys.argv[1]))

s.close()

クライアントが送信したデータをサーバーに受信させたい。

これを試すと、次のエラーが表示されます

クライアント側

トレースバック (最新の呼び出しが最後): ファイル "Client.py"、21 行目、s.send(sys.argv[1]) の TypeError: 'str' はバッファー インターフェイスをサポートしていません

サーバ側

ファイル「Listener.py」、23 行目、data=s.recv(100000) socket.error: [Errno 10057] A request to send or receive data was disallowed because the socket is not connected and (when when send on a socket is not connected) sendto 呼び出しを使用するソケット) アドレスが指定されていません

4

4 に答える 4

8

サーバーでは、リッスンソケットを使用してデータを受信します。新しい接続を受け入れるためにのみ使用されます。

これに変更します:

conn,addr =s.accept()

data=conn.recv(100000)  # Read from newly accepted socket

conn.close()
s.close()
于 2012-04-04T06:22:32.187 に答える
3

あなたの回線s.sendは、ストリーム オブジェクトを受け取ることを期待しています。あなたはそれに文字列を与えています。文字列を BytesIO でラップします。

于 2012-04-04T06:21:43.407 に答える
0

どのバージョンの Python を使用していますか? エラー メッセージから、意図せず Python3 を使用していると思われます。プログラムを Python2 で試すことができますが、問題ないはずです。

于 2012-04-04T06:25:21.133 に答える