TO a similar problem here error: [Errno 10053]
I also tried the same thing and got the same error.
If there is a simple code like this to demonstrate this error:
import socket host = 'localhost' port = 5001 size = 102400 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host,port)) for msg in ['Hello, world','Test','anything goes here']: s.send(msg) data = s.recv(size) print 'Received:', data s.close()
If you create a socket object and the amt it can send and echo back from server to see how much it receivers, if you vary that, say 1024 to 102400(in this code); Which means the socket should not get closed but again in my Windows OS, the server side keeps listening and printing any data that client sends but on the Client side you get this error;
However if it is that the client can connect only once and send and receive only once, then that is how it was designed. Trying this works without any errors:
for msg in ['Hello, world','Test','anything goes here']: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host,port)) s.send(msg) data = s.recv(size) s.close() print 'Received:', data
I am not sure if one socket object works only once to send and recieve data.
UPDATE I think the issue was the capacity per client socket to receive data as per the buffersize fixed; That's why the second code snippet above works thus creating new client connection sockets on the server. But that way lots of sockets are going to get used up.
Instead the following code fixed that problem by checking the amt of size being used up. If it exceeds the given amount, it creates a new socket at clients' but makes sure the message is sent; Actually the problem was with the server code but fixed it.
size = 10
This is a quick baby attempt at the code. I am sure you would understand and optimize it for the better!
client code:
messag = ['Hello, world', 'Test', 'anything goes here'] def client_to_server(messag,host,port,size): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) countmsg = 0 restmsg = '' for msg in messag: strl = tmsg = msg if len(restmsg): tmsg = restmsg + ' ' + msg countmsg = len(tmsg) if countmsg <= size: pass else: restmsg = tmsg[size:] tmsg = tmsg[:size] #s.close() countmsg = len(tmsg) #s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #s.connect((host, port)) print 'Sending to server msg {}'.format(tmsg) s.send(tmsg) # s.settimeout(1) try: data = s.recv(size) print 'Received:', data if strl == data: print strl,data countmsg = 0 restmsg = '' except (socket.error), e: print e.args,e.message s.close() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host, port)) s.close() if restmsg: client_to_server([restmsg],host,port,size) return client_to_server(messag,host,port,size)
Server Code:
size = 1024 #This has to be bigger than client buf size! s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(backlog) while True: #this is what accepts and creates a P2P dedicated client socket per socket client, address = s.accept() try: data = client.recv(size) while data or 0: print "Client sent {} | Server sending data to client address {}".format(data, address) client.send(data) data = client.recv(size) else: client.close() except (socket.error), e: client.close() print e.args, e.message
Try it out. This uses the same socket.