Sal*_*ain 5 java sockets android network-programming tcp
非常坚持这一点,所以我感谢您提供的任何帮助!
我有两个程序,一个Android 应用程序和一个多套接字Java 服务器。Android 应用程序首先建立到服务器(端口 21)的出站连接,然后接受来自服务器(端口 1025)的入站连接。为了保持一致性,我将始终将 Android 应用程序称为客户端,将 Java 应用程序称为主机,无论建立连接的方向如何。
这些程序在本地网络上完美运行,无论是我的 Android 手机连接到我的本地服务器 IP 192.168.1.103,还是托管服务器的 PC 上的模拟器连接到10.0.2.2.
但是,当我移出本地 Intranet 时,我仍然可以在端口 21 上建立 android-> 服务器连接,但尝试从服务器连接到端口 1025 上的手机时超时。
我正在考虑的事情清单:
测试列表及其结果:
10.0.2.2路由器是否存在 -成功192.168.1.103-成功最后是一些代码,服务器的输出连接尝试(连接是在构造函数中创建的,因为在服务器收到入站连接时已经创建了该客户端的子线程)
OutputSocketServer(InetAddress inetAddress, int port, int count , LinkedBlockingQueue<Packet> outQueue) {
this.outQueue = outQueue;
SocketAddress sockaddr = new InetSocketAddress(inetAddress,port);
try {
outConnection = new Socket();
System.out.println("Connecting to " + sockaddr.toString());
outConnection.connect(sockaddr, timeout);
System.out.println("Connected to port " + outConnection.getPort() + " of " +outConnection.getInetAddress().toString() + " from local port " + outConnection.getLocalPort());
osw = new ObjectOutputStream(outConnection.getOutputStream());
} catch (IOException e) {
System.out.println("Output Socket Server: Could not establish outbound connection" + e.toString());
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
以及Android客户端连接接受代码的相关部分
public void run() {
try {
System.out.println("Listening for connection on local port " + inSocket.getLocalPort());
this.inConnection = inSocket.accept();
System.out.println("Accepted connection on port " + inConnection.getPort() + " from ip " + inConnection.getInetAddress().toString());
isr = new ObjectInputStream(inConnection.getInputStream());
}
catch (Exception e) {
System.out.println("Inbound Socket Server: " + e.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
Android 客户端的堆栈跟踪仅显示SocketTimeoutException: operation timed out服务器的 和ConnectException: connection refused: connect。在此之前客户端的LogCat显示Listening for connection on port 1025和服务器Connecting to /my.ip.he.re:1025
感谢您的指导!
大多数无线服务仅向设备分配不可路由的 RFC1918 地址,并通过 NAT 路由“互联网”。这意味着您的设备可以进行出站连接 - 但您无法从外部(入站)连接到它。原因之一是缺乏免费的 IPv4 地址空间。
由于您的帖子提到了端口 21:如果您想要 FTP,请使用被动模式。在此模式下,Android 设备将与服务器建立数据连接。
| 归档时间: |
|
| 查看次数: |
4326 次 |
| 最近记录: |