我不知道如何区分服务器中收到的数据。
我想通过在发送数据或接收数据时设置MessageID(示例名称)来区分数据。
以下是示例:
服务器
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host=''
port=int(input(Please Enter the port:))
s.bind((host,port))
s.listen(1)
conn, addr = s.accept()
print('Someone connected.He :%s'%addr)
while True:
data=conn.recv(1024,MessageID) # I want to make this.
print(data)
客户端
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host=''
port=int(input(Please Enter the port:))
s.connect((host,port))
data='hello world'
data=data.encode('utf-8') # I encoded data because Python 3.3.3's socket module doesn't
work with string(str) when I send data.
s.send(data,MessageID) # This is what I want.I want to set messageID which can distinguish data.
如何制作这样的?
其他程序员如何区分python中的数据..?
我真的想要的是:如果不是服务器想要的messageID,请不要收到。
答案 0 :(得分:2)
您需要将MessageID
放入您发送的data
。使用一些已知的数据协议可能是一个好主意,所以你知道会发生什么,但这是一个简单的例子。您需要实现正确的错误处理。请注意,您还必须实现一个循环来读取所有数据,因为使用单个recv
读取套接字最终会导致您收到部分消息的情况。我真的不知道你的数据是什么,所以我不会猜测它。
客户
....
message_id = 1
data = '{}:hello world!'.format(message_id)
data = data.encode('utf-8')
s.send(data)
服务器
while True:
data = conn.recv(1024)
if not data:
# Always handle the case where the client
# connects but sends no data. This means the socket is closed
# by the other end.
break
message_id, message = data.split(":", 1)
print "Got message, id: {}, data: {}".format(message_id, message)
如果您使用pickle或json实现此功能,则只需使用词典:
# Client
data = {'message_id': 1, 'message': 'hello world'}
data = pickle.dumps(data) # Or json.dumps(data)
s.send(data)
# Server
while True:
data = conn.recv(1024)
if not data:
break
data = pickle.loads(data) # Or json.loads(data)
print "Got id: {message_id}, data: {message}".format(**data)