В настоящее время я пытаюсь понять сокеты в Python и использую следующий код для получения данных, передаваемых через TCP со смартфона в сети Hotspot.
import socket
import logging
# Logging routine
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('localhost', 5000)
logger.info('starting up on %s port %s' % server_address)
sock.bind(server_address)
# Listen for incoming connections
sock.listen(1)
# Wait for a connection
logger.info('waiting for a connection')
connection, client_address = sock.accept()
try:
logger.info('connection from', client_address)
while True:
data = connection.recv(16)
if data:
print 'Do stuff here'
else:
print 'no more data from', client_address
break
finally:
# Clean up the connection
connection.close()
При первом запуске кода все работает правильно. После запуска скрипта и повторного запуска у меня возникает следующая ошибка: [Errno 48] Address already in use?
. Однако, если я снова запускаю скрипт после сбоя программы, все работает правильно. Я проверил и подтвердил, что он заканчивается оператором finally для connection.close()
. Кажется, мне всегда нужно запускать программу два раза, чтобы иметь возможность запускать ее два раза подряд.
netstat -an | egrep :5000
. Дайте нам знать, что он говорит. - person Robᵩ   schedule 05.11.2015