服务器客户端通信Python

时间:2012-04-04 06:17:14

标签: python sockets client

服务器

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行,in     s.send(sys.argv中[1]) TypeError:'str'不支持缓冲区接口

服务器端

文件“Listener.py”,第23行,in     数据= s.recv(100000) socket.error:[Errno 10057]不允许发送或接收数据的请求 ause套接字没有连接和(当使用数据报套接字发送时) 发送到电话)没有提供地址

4 个答案:

答案 0 :(得分:8)

在服务器中,您使用侦听套接字来接收数据。它仅用于接受新连接。

改为:

conn,addr =s.accept()

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

conn.close()
s.close()

答案 1 :(得分:3)

您的行s.send希望收到一个流对象。你给它一个字符串。用BytesIO包装你的字符串。

答案 2 :(得分:0)

您使用的是哪个版本的Python?从错误消息,我猜你无意中使用Python3。你可以用Python2试试你的程序,应该没问题。

答案 3 :(得分:0)

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

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