К подобной проблемой здесь error: [Errno 10053]
Я также попробовал то же самое и получил ту же ошибку.
Если есть простой код, как это, чтобы продемонстрировать эту ошибку:
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()
Если вы создаете объект сокета и АМТ он может отправлять и эхо обратно от сервера, чтобы увидеть, насколько это приемники, если вы варьируются, например, 1024 - 102400 (в этом коде); Что означает, что сокет не должен закрываться, но снова в моей ОС Windows, серверная сторона продолжает слушать и печатать любые данные, которые отправляет клиент, но со стороны клиента вы получаете эту ошибку;
Однако, если клиент может подключиться только один раз и отправлять и получать только один раз, то именно так оно и было разработано. Попытка это работает без каких-либо ошибок:
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
Я не уверен, что если один объект сокета работает только один раз, чтобы получать и отправлять данные.
ОБНОВЛЕНИЕ Я думаю, что проблема заключалась в емкости каждого клиентского сокета для приема данных в соответствии с фиксированным буферизацией; Вот почему второй фрагмент кода выше работает, создавая новые сокеты для подключения клиентов на сервере. Но таким образом многие сокеты будут израсходованы.
Вместо этого следующий код исправил эту проблему, проверив размер используемого размера. Если он превышает заданную сумму, он создает новый сокет на клиентах, но обеспечивает отправку сообщения; На самом деле проблема была связана с кодом сервера, но исправлена.
размер = 10
Это быстро попытка ребенка в коде. Я уверен, что вы поймете и оптимизируете его к лучшему!
код клиента:
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)
сервера Код:
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
Попробуйте. Это использует тот же сокет.
это может помочь: http://stackoverflow.com/a/20421867/2290820 – user2290820