Python:为什么recv()没有';阻塞模式下的t阻塞?
这是我的代码,客户端应该在recv中阻塞(预期256个字符),因为服务器只向它发送5个字符,但是recv返回,知道吗Python:为什么recv()没有';阻塞模式下的t阻塞?,python,sockets,blocking,recv,Python,Sockets,Blocking,Recv,这是我的代码,客户端应该在recv中阻塞(预期256个字符),因为服务器只向它发送5个字符,但是recv返回,知道吗 #----------------------------------------------------------- # server.py import socket import sys sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 10000)) soc
#-----------------------------------------------------------
# server.py
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 10000))
sock.listen(1)
while True:
connection, client_address = sock.accept()
try:
connection.send('hello'.encode('utf-8'))
except Exception:
connection.close()
#-----------------------------------------------------------
# client.py
import socket
import sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 10000))
sock.setblocking(True)
try:
data = sock.recv(256)
print('received "%s"' % data.decode('utf-8'))
finally:
sock.close()
sock.recv()
返回,因为在套接字上接收到某些内容,或者如果len(data)
为0,因为服务器关闭了连接
期望256个字节并不意味着它们将一次性接收。在您的示例中,256
是最大字节数
阻塞行为的意思是:等到收到某个东西,而不是等到收到所有预期的东西
如果您确定服务器将发送256字节,则可以进行循环:
data = ''
while len(data) < 256:
data += socket.recv(256)
data=''
而len(数据)<256:
数据+=socket.recv(256)
如果您无法一次性接收256字节,这意味着您的网络可能非常不稳定(wifi?),或者服务器或客户端运行在具有非常小缓冲区的嵌入式平台上?或者服务器正在发送小数据块…sock.recv()
返回是因为在套接字上接收到某些内容,或者如果len(data)
为0,是因为服务器关闭了连接
期望256个字节并不意味着它们将一次性接收。在您的示例中,256
是最大字节数
阻塞行为的意思是:等到收到某个东西,而不是等到收到所有预期的东西
如果您确定服务器将发送256字节,则可以进行循环:
data = ''
while len(data) < 256:
data += socket.recv(256)
data=''
而len(数据)<256:
数据+=socket.recv(256)
如果您无法一次性接收256字节,这意味着您的网络可能非常不稳定(wifi?),或者服务器或客户端运行在具有非常小缓冲区的嵌入式平台上?或者服务器正在发送小数据块