从android tcp客户端到python tcp s的连接被拒绝

2024-10-04 03:29:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在实现android客户端(在物理设备上)和python服务器(在我的pc上)之间的套接字连接时遇到了一个问题。当客户端试图连接到服务器时,我得到一个connectiondeclient错误。但是如果我尝试用telnet在本地主机上连接,它就可以工作了。如果我从android设备上运行telnet,连接将被拒绝。我查找tcpdump,发现客户端发送了启动连接的请求,而服务器发送了一个重置请求。在

代码如下:

服务器python:

import socket

bind_ip = socket.gethostname()
bind_port = 5000

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(5)

print("[*] Listening on %s:%d" % (bind_ip, bind_port))

while True:
    client, addr = server.accept()
    print("[*] Accepted connection from: %s:%d" %  (addr[0], addr[1]))

android客户端活动:

^{pr2}$

最后是tcpdump信息:

12:20:41.903480 ARP, Request who-has robinho-laptop tell android-c49064c93c3f654e.station, length 28
12:20:41.903508 ARP, Reply robinho-laptop is-at 7c:5c:f8:7f:3e:c4 (oui Unknown), length 28
12:20:41.911749 IP android-c49064c93c3f654e.station.41439 > robinho-laptop.5000: Flags [S], seq 3327241168, win 14600, options [mss 1460,sackOK,TS val 40845430 ecr 0,nop,wscale 6], length 0
12:20:41.911791 IP robinho-laptop.5000 > android-c49064c93c3f654e.station.41439: Flags [R.], seq 0, ack 3327241169, win 0, length 0

这里是android logcat:

E/DataScheduler: isDataSchedulerEnabled():false
W/System.err: java.net.ConnectException: failed to connect to localhost/::1 (port 50000): connect failed: ECONNREFUSED (Connection refused)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:130)
W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
W/System.err:     at java.net.Socket.startupSocket(Socket.java:566)
W/System.err:     at java.net.Socket.<init>(Socket.java:226)
W/System.err:     at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
W/System.err:     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
W/System.err:     at java.net.Socket.<init>(Native Method)
W/System.err:     at utils.connection.Client$1.run(Client.java:42)
W/System.err:     at java.lang.Thread.run(Thread.java:841)
W/System.err: Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
W/System.err:     at libcore.io.Posix.connect(Native Method)
W/System.err:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
W/System.err:     at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
W/System.err:     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
W/System.err:     at libcore.io.BlockGuardOs.connect(Native Method)
W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:176)
W/System.err:     at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
W/System.err:     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
W/System.err:     at libcore.io.IoBridge.connectErrno(Native Method)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:128)
W/System.err:   ... 9 more
W/System.err: java.net.ConnectException: failed to connect to laptop.station/192.168.1.6 (port 5000): connect failed: ECONNREFUSED (Connection refused)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:130)
W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
W/System.err:     at java.net.Socket.startupSocket(Socket.java:566)
W/System.err:     at java.net.Socket.<init>(Socket.java:226)
W/System.err:     at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
W/System.err:     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
W/System.err:     at java.net.Socket.<init>(Native Method)
W/System.err:     at ui.activities.Test2Activity$1.run(Test2Activity.java:62)
W/System.err:     at java.lang.Thread.run(Thread.java:841)
W/System.err: Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
W/System.err:     at libcore.io.Posix.connect(Native Method)
W/System.err:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
W/System.err:     at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
W/System.err:     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
W/System.err:     at libcore.io.BlockGuardOs.connect(Native Method)
W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:176)
W/System.err:     at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
W/System.err:     at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:631)
W/System.err:     at libcore.io.IoBridge.connectErrno(Native Method)
W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:128)
W/System.err:   ... 9 more

有人能解释一下这个问题吗?在


Tags: ionetconnectdejavasystemmethodat
1条回答
网友
1楼 · 发布于 2024-10-04 03:29:52

您可能将您的套接字绑定到错误的ip。在

来自https://pymotw.com/2/socket/tcp.html

Many servers have more than one network interface, and therefore more than one IP address. Rather than running separate copies of a service bound to each IP address, use the special address INADDR_ANY to listen on all addresses at the same time. Although socket defines a constant for INADDR_ANY, it is an integer value and must be converted to a dotted-notation string address before it can be passed to bind(). As a shortcut, use the empty string '' instead of doing the conversion.

server_address = ('', 5000)
sock.bind(server_address)

相关问题 更多 >