1)我已经为Android开发了一个服务器套接字应用,它监听端口8888。
a)当我在模拟器上运行我的服务器时,由于模拟器和我PC上的客户端应用程序都在同一个网络上,我认为它们应该能够相互通信,但是我无法通过客户端应用程序与其通信。
b)当我在我的Android移动设备上部署相同的服务器应用程序,并尝试通过我PC上的相同客户端应用程序进行通信时,客户端应用程序会出现超时异常,因为它无法与之通信。
我的第一个问题是如何使用模拟器和1个Android设备来测试服务器/客户端套接字应用程序?我是否可以使用我的PC的客户端套接字应用程序来测试我的服务器套接字?
**我已经为其他应用程序准备了客户端套接字应用程序,因此客户端应用程序没有问题。
2)我第二个问题是如何在Android设备上测试我的服务器应用程序?我必须转发所需的端口吗? a)对于模拟器:我如何转发端口? b)对于设备:我如何转发端口? c)我可以编程转发端口吗?
**仅供参考:
我正在使用Eclipse作为Android开发工具。
**我的服务器代码可能也存在问题。
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(SERVERPORT);
System.out.println("Listening :" + SERVERPORT);
System.out.println("Server IP:" + SERVERIP);
}
catch (Exception e)
{
e.printStackTrace();
}
while(true)
{
try
{
socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("ip: " + socket.getInetAddress());
String str = in.readLine();
System.out.println("message Received: " + str);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if( socket!= null)
{
try
{
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if( dataInputStream!= null)
{
try
{
dataInputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if( dataOutputStream!= null)
{
try
{
dataOutputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
编辑: 非常有趣的一点是,如果我将端口设置为8080,PC上的客户端套接字应用程序会连接到我的安卓设备上的安卓应用程序,但我没有在服务器上收到套接字或发送的数据。链接后什么也不会发生 => socket = serversocket.accept();
此外,我已在清单中设置了权限。
redir add tcp:5000:6000
的部分。它基本上将您PC IP地址上的端口5000转发到模拟器IP地址上的端口6000。因此,您的客户端应用程序将与PC地址和端口6000通信,而设备上的服务器套接字则在端口5000上侦听。 - Christian Garbin