Python 奇怪的错误48地址已在使用中

Python 奇怪的错误48地址已在使用中,python,sockets,tcp,connection,errno,Python,Sockets,Tcp,Connection,Errno,我目前正在尝试理解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)

我目前正在尝试理解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]地址已在使用?
。但是,如果我在程序崩溃后再次运行脚本,它将正常工作。我已经检查并确认它在
connection.close()
的finally语句中结束。似乎我总是要运行两次程序才能连续运行两次

这是因为上一次执行使套接字处于
TIME\u WAIT
状态,无法立即重用

为了防止出现这种情况,请设置
套接字。因此\u REUSEADDR

改变

sock=socket.socket(socket.AF\u INET,socket.sock\u STREAM)


谢谢你的回复。但不幸的是,这也不起作用。我只运行了一次脚本。在第二次出现错误时。如果我再次运行,它将毫无问题地运行。它没有解决问题。错误是什么?是否是
socket.error:[Errno 98]地址已在使用中
?否,是相同的错误:
[Errno 48]地址已在使用中
,因为您以前运行过脚本,进程很可能仍然绑定到端口(5000)。我认为您需要终止绑定到端口的进程,然后重新运行脚本。检查这个,哼,好的,这很有意义。是否有机会在脚本末尾以编程方式执行此操作?每次运行后,在shell提示符下执行此命令:
netstat-an | egrp:5000
。让我们知道它说什么。@Rob提供的命令不产生输出。我的请求是在每次运行后运行该命令。您描述的测试将运行您的命令三次。在您描述的三次运行中的哪一次之后,命令没有生成输出?
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)