【发布时间】:2026-01-29 14:10:01
【问题描述】:
如果我要在客户端和服务器之间建立连接,并为每个服务器配置不同的缓冲区大小,会发生什么。
这是我客户的代码:
import socket,sys
TCP_IP = sys.argv[1]
TCP_PORT = int(sys.argv[2])
BUFFER_SIZE = 1024
MESSAGE = "World! Hello, World!"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print "received data:", data
服务器代码:
import socket,sys
TCP_IP = '0.0.0.0'
TCP_PORT = int(sys.argv[1])
BUFFER_SIZE = 5
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
while True:
conn, addr = s.accept()
print 'New connection from:', addr
while True:
data = conn.recv(BUFFER_SIZE)
if not data: break
print "received:", data
conn.send(data.upper())
conn.close()
这意味着我将被限制为只有 5 个字节?这意味着我将无法接收完整的数据包并且会丢失 1024-5 个数据包? 我或者这是否意味着我只能获得 5 个字节的数据包,这意味着当客户端发送它时,我必须将 1024 除以 5 并获得 204.8 个数据包(?),而不是接收一个 1024 字节的数据包。听起来不可能。
该代码中一般发生了什么?
谢谢。
【问题讨论】:
-
(已删除 protocol-buffers - 这是一种特定的序列化格式,不是关于缓冲区的一般内容)
标签: sockets tcp buffer network-protocols