【发布时间】:2011-11-19 06:43:09
【问题描述】:
我对 Android 中的 Socket 通信有一些疑问。
1)我已经为 android 开发了监听 8888 端口的服务器套接字应用程序。
a) 当我在模拟器上托管我的服务器时,我无法通过我电脑上的客户端应用程序与它通信,因为(模拟器和客户端)应用程序都在我的笔记本电脑上并且在同一个网络上,我认为他们应该能够相互交流。
b) 当我在我的 android 移动设备上部署相同的服务器应用程序并尝试通过我在我的 PC 上的相同客户端应用程序进行通信时,客户端应用程序会出现超时异常,因为它无法与之通信。
我的第一个问题是如何使用 Emulator 和 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 的客户端套接字应用程序确实连接到我的 android 设备上的 Android 应用程序,但我没有在我的服务器上收到套接字,也没有收到我发送的数据。链接后没有任何反应 => socket = serversocket.accept();
我还在清单中设置了权限。
【问题讨论】:
标签: android sockets emulation port