我已经编写了两个程序来测试这个p23_server.py,一个是服务器端的p23_server.py,另一个是客户端的p23_client.py:
p23_server.py
#p23_server.py
import socket
HOST = '10.0.2.15'
PORT = 12345
server = socket.socket()
server.bind((HOST,PORT))
server.listen(1)
(client,addr) = server.accept()
while True:
data = client.recv(32)
if not data:
break
print(data.decode('utf-8'))
server.close()
p23_client.py
#p23_client.py
import socket
import sys
HOST = '10.0.2.15'
PORT = 12345
string = sys.argv[1]
data_to_send = string.encode('utf-8')
s = socket.socket()
s.connect((HOST,PORT))
#s.sendall(data_to_send)
s.send(data_to_send)
s.close()
我运行了p23_server.py,然后执行了以下命令:
wahalez@wahalez:~/dev/python$ python p23_client.py $(python -c 'for i in range(1024): print("a",end="")')
以运行客户端并查看服务器输出。
我使用socket.send()和socket.sendall()函数分别执行了一次。结果相同。问题是为什么?send不应该只发送一次数据,服务器接收32个字节就完成了吗?
与send()不同,此方法继续从字节发送数据,直到所有数据已发送或出现错误。成功时返回None。出现错误时,会引发异常,并且无法确定是否成功发送了多少数据。
为什么这两个函数产生相同的结果?