关于Android中的Socket通信,我几乎没有什么问题。
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的客户端套接字应用程序,请在我的安卓设备上连接到Android,但我不会在服务器上接收套接字,也不会接收我发送的数据。在链接=> socket = serversocket.accept();之后什么都不会发生
另外,我已经在舱单中设置了许可。
发布于 2011-09-17 13:36:04
关于如何从模拟器访问网络的第一个问题:模拟器运行在自己的网络地址空间上,与您的PC隔离。您必须将网络重定向配置为访问网络上的设备。
请参阅https://developer.android.com/studio/run/emulator-networking.html中的详细信息
发布于 2011-09-17 13:19:34
您在Manifest.xml中设置了正确的权限吗?
<uses-permission android:name="android.permission.INTERNET" />是否需要安装套接字?
发布于 2020-12-12 20:51:15
感谢你的提问和回答。它帮助我找出通往我的工作组合的狭窄道路。
这个过程比我们预期的要复杂得多。套接字客户端必须使用"127.0.0.1“而不是"192.168.0.15”或"10.0.2.15“连接到同一台计算机上的Android模拟器。下面是我尝试和工作的6个步骤。
第0步:进入航站楼
步骤1:使用adb,(在我的例子中端口是5554)查找Android模拟器控制台的端口,/Users/zhijunsheng/Library/Android/sdk/platform-tools/adb设备列表中附加了9357 case设备模拟器-5554设备。
步骤2:检索Android模拟器控制台猫/Users//.emulator_console_auth_token sncfmfC+Lg9OtAT4的auth_token
步骤3:连接到Android模拟器控制台telnet localhost 5554尝试::1.连接到本地主机。好的
步骤4:验证auth sncfmfC+Lg9OtAT4
步骤5:添加重定向指令redir添加tcp:50000:50001
我也有YouTube中的视频记录我尝试过的东西。
https://stackoverflow.com/questions/7455016
复制相似问题