【发布时间】:2016-02-06 11:44:10
【问题描述】:
我目前正在尝试了解 Python 中的套接字,并且我正在使用以下代码接收通过 TCP 从热点网络上的智能手机传输的数据。
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?。但是,如果我在程序崩溃后再次运行该脚本,则一切正常。我已经检查并确认它以 connection.close() 的 finally 语句结束。看来我总是要运行两次程序才能连续运行两次。
【问题讨论】:
-
每次运行后,在 shell 提示符下执行此命令:
netstat -an | egrep :5000。让我们知道它说了什么。 -
@Rob 提供的命令不产生输出。
-
我的要求是在每次运行后运行该命令。您描述的测试运行您的命令三次。在您描述的三个运行中的哪一个之后,该命令没有产生任何输出?
标签: python sockets tcp connection errno