&引用;[Errno 10048]每个套接字地址(协议/网络地址/端口)通常只允许使用一次;在关闭并重新打开Python套接字之后

&引用;[Errno 10048]每个套接字地址(协议/网络地址/端口)通常只允许使用一次;在关闭并重新打开Python套接字之后,python,sockets,Python,Sockets,我有以下代码: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.bind(('10.0.0.253', 8080)) except: s.close() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('10.0.0.253', 8080)) s.listen(1) conn, addr = s.accept()

我有以下代码:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    s.bind(('10.0.0.253', 8080))
except:
    s.close()
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('10.0.0.253', 8080))


s.listen(1)
conn, addr = s.accept()
它绑定,然后如果遇到错误,就会破坏套接字,然后创建一个新的套接字,并将其绑定到相同的IP和端口。出于某种原因,即使在关闭套接字后,我也会出现以下错误:

Traceback (most recent call last):
File "C:\Users\other\Desktop\tcpReverseShell_Server.py", line 68, in <module>
  main()
  File "C:\Users\other\Desktop\tcpReverseShell_Server.py", line 66, in main
  connect()
File "C:\Users\other\Desktop\tcpReverseShell_Server.py", line 43, in connect
  s.bind(('10.0.0.253', 8080))
File "C:\Python27\lib\socket.py", line 228, in meth
  return getattr(self._sock,name)(*args)
error: [Errno 10048] Only one usage of each socket address (protocol/network 
address/port) is normally permitted
回溯(最近一次呼叫最后一次):
文件“C:\Users\other\Desktop\tcpReverseShell\u Server.py”,第68行,在
main()
文件“C:\Users\other\Desktop\tcpReverseShell\u Server.py”,第66行,主目录
连接()
文件“C:\Users\other\Desktop\tcpReverseShell\u Server.py”,第43行,在connect中
s、 绑定('10.0.0.253',8080))
文件“C:\Python27\lib\socket.py”,第228行,meth格式
返回getattr(self.\u sock,name)(*args)
错误:[Errno 10048]每个套接字地址(协议/网络)只使用一次
地址/端口)通常是允许的
我找到的唯一解决方案是使用
s.setsockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)
,但当我尝试时,我得到了以下错误:
[Errno 10013]试图以访问权限所禁止的方式访问套接字
。我


我使用的是Windows 10、Python 2.7.13。

我可以通过同时运行两次Python脚本来模拟您的问题。问题是其他一些应用程序目前也在使用套接字

在代码中,当套接字绑定失败时会触发except块。但是,当您尝试
.close()
套接字并重试时,它不会执行任何操作,因为它正在尝试
.close()
未绑定的套接字。因此,您的代码相当于:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('10.0.0.253', 8080))

s.listen(1)
conn, addr = s.accept()
请注意,当您
.close()
套接字时,它也不会
.close()
当前绑定的应用程序,它会尝试
.close()
到您创建的套接字对象。因此,再次尝试绑定套接字将失败

要了解套接字的用途,可以使用
netstat

netstat -aon | findstr :8080
这会给你一些类似的信息:

TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       6604
然后,如果要强制杀死它,可以使用
TaskKill
和应用程序的PID:

TaskKill /PID 6604 /F

我以前在C和C++中遇到过这个问题。我不记得解决方案/问题了,但我可以告诉你这是一个操作系统/套接字问题