Like I said, give your Pi a static IP address, or just replace 10.TE.AM.XX with raspberrypi.local.
That will definitely be an issue. You're right, putting bind() back in the client will fix it. Here's my code that I tested this with. Uses python 3, so might be a little different than yours.
Client
Code:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 5800)) # Bind to empty IP so it can use anything
s.connect(("192.168.1.3", 5800)) # 192.168.1.3 is the IP of my server
s.send(b"hello")
s.close()
Server
Code:
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('', 5800)) # Again, bind to any address, but this specific port
# become a server socket
serversocket.listen(1)
(client, addr) = serversocket.accept()
print("Recieved connection from {}".format(addr))
while True:
data = client.recv(1024)
if len(data) == 0: # According to the spec, empty recieve means that the socket is closing
break
print("recv {}".format(data))
client.close()
According to Wireshark, this code only communicates on port 5800.