我有幾個關於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