Mil*_*ica 3 python sockets select
只是想了解套接字如何工作。我正在使用我找到的修改后的测试选择服务器和客户端。这是服务器:
import socket
host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
client, address = s.accept()
running = 1
while running:
data = client.recv(size)
print("received: "+data + "\n")
if data:
client.send(data)
running = 0
else:
running = 0
client.close()
Run Code Online (Sandbox Code Playgroud)
和客户:
import socket
import sys
host = 'localhost'
port = 50000
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
sys.stdout.write('%')
s.send("(Message1)")
while 1:
s.send("(Message2)")
data = s.recv(size)
sys.stdout.write(data)
sys.stdout.write('%')
s.close()
Run Code Online (Sandbox Code Playgroud)
我期望服务器打印如下内容:
received: (Message1)
received: (Message2)
Run Code Online (Sandbox Code Playgroud)
因为它们是单独发送的不同消息,但我得到:
received: (Message1)(Message2)
Run Code Online (Sandbox Code Playgroud)
这是否与接收到的数据大小、某种缓冲区相关,或者是否与超时相关,或者其他什么?
这是流套接字的完全正常行为,流套接字是连续字节流,而不是消息流。您可以设想通过编码来格式化消息,例如消息的长度,后跟消息数据。然后您可以使用这些指示解析接收到的缓冲区。您也可以等到找到开头“(”对应的“)”。
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |