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

时间:2018-01-18 14:37:02

标签: java android sockets serversocket android-networking

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

  

java.net.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

这是来自客户端的堆栈跟踪。这只是一个超时异常。从服务器我没有任何例外。

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 个答案:

答案 0 :(得分:1)

可能正在使用端口13005,可能最后一个连接未关闭。

通过USB连接您的设备。然后转到您拥有<label><input type=checkbox value=weekly />weekly</label> <label><input type=checkbox value=monthly />monthly</label> <label><input type=checkbox value=quarterly />quarterly</label> <button>do a thing</button>的文件夹并运行以下命令:

  1. adb
  2. adb shell
  3. 这将显示Android设备中的所有活动端口。您将能够检查是否正在使用端口13005。

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

    1. netstat -nap
    2. 然后尝试使用另一个端口,例如5001.如果端口不受限制且空闲,则应该能够连接。

答案 1 :(得分:0)

您确定该端口可从外部使用吗? 您必须在路由器配置中打开端口。