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()

我希望服务器接收客户端发送的数据。

尝试此操作时出现以下错误

客户端

Traceback(最近一次调用最后一次):文件“Client.py”,第 21 行,在 s.send(sys.argv[1]) 中类型错误:'str' 不支持缓冲区接口

服务器端

文件“Listener.py”,第 23 行,在 data=s.recv(100000) socket.error: [Errno 10057] A request to send or receive data was not allowed because the socket is not connected and (when sent on a datagram使用 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 回答
-1

尝试将客户端套接字更改为:

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
于 2018-06-21T17:09:02.157 回答