Я написал две программы для проверки этого 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 'для i в диапазоне (1024): print ("a", end = "")')
для запуска на стороне клиента и посмотрите, что выводит сервер.
Я выполнил его один раз с помощью socket.send () и один раз с функцией socket.sendall (). Результаты одинаковы. Вопрос почему? не следует отправлять, просто отправьте данные один раз, а сервер получит 32 байта и все?
В отличие от send (), этот метод продолжает отправлять данные из байтов, пока не будут отправлены все данные или пока не произойдет ошибка. Ни один не возвращается в случае успеха. В случае ошибки возникает исключение, и невозможно определить, сколько данных, если таковые имеются, были успешно отправлены.
Почему обе функции дают одинаковый результат?