我有几个关于Android中的套接字通信的问题。Android - 服务器套接字
1)我已经开发了服务器套接字应用程序的Android侦听端口8888
一)当我主机上的模拟器我无法通过我的客户端应用程序进行通信,以它在我的服务器我因为两个(模拟器&客户端)应用程序都在我的笔记本电脑&在同一网络上,我认为他们应该能够相互沟通。
b)当我在我的android移动设备上部署相同的服务器应用程序,并尝试通过我PC上的相同客户端应用程序进行通信时,客户端应用程序因为无法与其通信而发出超时异常。
我的第一个问题是我如何测试服务器/客户端套接字应用与仿真器& 1 android设备?我甚至可以使用我的PC的客户套接字应用程序来测试我的服务器套接字?
**我有我的其他应用程序的客户端套接字应用程序,所以客户端应用程序没有问题。
2)我的第二个问题是测试我的服务器应用程序在Android设备上是否必须转发所需的端口? a)对于Emulator:我如何转发端口? b)对于设备:我如何转发端口? c)我可以通过编程方式转发端口吗?
**只为信息:
我使用Eclipse作为机器人的研究与开发工具。
**我的服务器代码也可能与我的服务器套接字代码有问题。
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应用都连接到Android应用程序在Android设备上,但我不我的服务器,也不是数据上的接收套接字我发送。链接后没有任何反应=>socket = serversocket.accept();
另外我已经在清单中设置了权限。
好的,为我工作,现在只剩下问题是我如何可以在我的Android设备上运行这个相同的服务器? – KhanZeeshan
不知道我跟着这个问题。你的意思是你的情况1b以上?如果是这样,它应该工作正常,假设PC试图通过暴露于网络的端口(配置为转发的端口)连接。 – chr
是的,只有问题没有回答是关于Android设备。当我在仿真器上转发端口时,它可以与PC的Socket设备通信,但我知道如何使该PC的客户端应用程序与部署在Android设备上的Android应用程序进行通信。 – KhanZeeshan