我有这段代码:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:fillViewport="true"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<chatapp.com.testdemo.CustomPager
android:id="@+id/custom_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
绑定,然后如果遇到错误,则销毁套接字然后创建一个新套接字并将其绑定到同一个IP和端口。出于某种原因,即使关闭套接字后,我也会收到此错误:
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()
我找到的唯一解决方案是使用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
,但当我尝试时,我收到此错误:s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
。我
我使用的是Windows 10,Python 2.7.13。
答案 0 :(得分:2)
我可以通过同时运行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