I've wrote two programs to test this p23_server.py for the server side and p23_client.py for the client side :
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()
I run the p23_server.py and then executed the command :
wahalez@wahalez:~/dev/python$ python p23_client.py $(python -c 'for i in range(1024): print("a",end="")')
to run the client side and look at what the server outputs.
I executed it once with the socket.send() and once with the socket.sendall() function. The results are the same. The question is why ? shouldn't send just send the data once and the server receive the 32 bytes and that's it ?
Unlike send(), this method continues to send data from bytes until either all data has been sent or an error occurs. None is returned on success. On error, an exception is raised, and there is no way to determine how much data, if any, was successfully sent.
Why both of the functions produce the same result ?