代码之家  ›  专栏  ›  技术社区  ›  machinery

从PC到设备的套接字连接失败

  •  0
  • machinery  · 技术社区  · 7 年前

    我正在为客户机-服务器应用程序使用套接字(即,客户机发送数据,服务器接收数据)。我的代码如下。当我在平板电脑上的Android 5.1应用程序中使用客户端,在Windows 7 PC上的Java应用程序中使用服务器时,它工作得非常好(即平板电脑可以向PC发送数据)。但是,当我尝试在平板电脑上使用Android 5.1应用程序上的服务器代码和PC上的客户端代码(即从PC向平板电脑发送数据)时,连接无法建立,我得到了错误:

    Java语言网ConnectException:连接超时:连接

    平板电脑和PC位于同一网络中。

    怎么了?

    服务器:

    ServerSocket ss = new ServerSocket(13005);
    Socket socket = ss.accept();
    ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
    

    客户:

    socket = new Socket();
    socket.connect(new InetSocketAddress("10.2.130.125", 13005));
    oos = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
    

    编辑:

    我现在已经执行了 netstat -nap . 输出如下(我稍微更改了外部地址)。13005似乎未使用。

    Proto Recv-Q Send-Q Local Address          Foreign Address        State
     tcp     417      0 10.2.130.125:36844     xxx.xxx.23.74:443      CLOSE_WAIT
     tcp     417      0 10.2.130.125:35996     xxx.xxx.23.110:443     CLOSE_WAIT
    tcp6       1      0 ::ffff:10.2.130.125:44994 ::ffff:xxx.xx.205.170:443 CLOSE_WA
    IT
    tcp6       0      0 ::ffff:10.2.130.125:43995 ::ffff:xx.xx.119.188:5228 ESTABL
    ISHED
    tcp6       1      0 ::ffff:10.2.130.125:42353 ::ffff:xx.xx.23.110:80 CLOSE_WAI
    T
    tcp6       1      0 ::ffff:10.2.130.125:35722 ::ffff:xx.xx.205.170:443 CLOSE_WA
    IT
    tcp6       1      0 ::ffff:10.2.130.125:48101 ::ffff:xx.xx.205.110:443 CLOSE_WA
    IT
    

    我还执行了 nmap -sS -Pn -p- 10.2.130.125 . 输出为:

    Starting Nmap 7.60 ( https://nmap.org ) at 2018-01-18 16:10 W. Europe Standard T
    ime
    Nmap scan report for public-docking-cx-0635.ethz.ch (10.2.130.125)
    Host is up (0.059s latency).
    Not shown: 65534 filtered ports
    PORT   STATE  SERVICE
    22/tcp closed ssh
    
    Nmap done: 1 IP address (1 host up) scanned in 159.90 seconds
    

    这是来自客户端的stacktrace。这只是一个超时异常。从服务器上我没有得到任何异常。

    java.net.SocketTimeoutException: connect timed out
        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at inf.ethz.ch.streaming.server.main.Main$1.run(Main.java:164)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Santiago Salem    7 年前

    可能正在使用端口13005,可能上次连接未关闭。

    通过USB连接设备。然后转到 adb 并运行以下操作:

    1. adb shell
    2. netstat -nap

    这将显示android设备中的所有活动端口。您将能够检查端口13005是否正在使用。

    如果您有很多连接,那么最好将grep应用到步骤2。

    1. netstat -na |grep 13005

    然后尝试使用其他端口,例如5001。如果端口不受限制且可用,则应该能够连接。

        2
  •  0
  •   Yannis    7 年前

    您确定端口可以从外部访问吗? 您必须在路由器配置中打开端口。