首页
学习
活动
专区
圈层
工具
发布

问套接字
EN

Stack Overflow用户
提问于 2011-09-17 13:12:56
回答 3查看 25.6K关注 0票数 6

关于Android中的Socket通信,我几乎没有什么问题。

1)我开发了用于android的服务器套接字应用程序,用于监听端口8888。

( a)当我在模拟器上托管服务器时,我无法通过我的PC上的客户端应用程序与它通信,因为这两个应用程序(模拟器和客户端)都在我的笔记本上&在同一个网络上,我认为它们应该能够相互通信。

( b)当我在我的android移动设备上部署相同的服务器应用程序,并试图通过我的PC上的同一个客户端应用程序进行通信时,客户端应用程序会给出一个超时异常,因为它无法与其通信。

我的第一个问题是如何使用模拟器&1 android设备测试服务器/客户端套接字应用程序?我甚至可以使用我的PC的客户端套接字应用程序来测试我的服务器套接字吗?

**我为我的另一个应用程序提供了客户端套接字应用程序,所以客户机应用程序没有问题。

2)我的第二个问题是在android设备上测试我的服务器应用程序,我需要转发所需的端口吗?( a)模拟器:我如何转发端口?( b)对于设备:如何转发端口?( c)我能否以编程方式转发端口?

**仅供参考:

我正在使用Eclipse作为android开发工具。

**我的服务器代码,因为我的服务器套接字代码也有问题。

代码语言:javascript
复制
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();之后什么都不会发生

另外,我已经在舱单中设置了许可。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-17 13:36:04

关于如何从模拟器访问网络的第一个问题:模拟器运行在自己的网络地址空间上,与您的PC隔离。您必须将网络重定向配置为访问网络上的设备。

请参阅https://developer.android.com/studio/run/emulator-networking.html中的详细信息

票数 7
EN

Stack Overflow用户

发布于 2011-09-17 13:19:34

您在Manifest.xml中设置了正确的权限吗?

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" />

是否需要安装套接字?

票数 9
EN

Stack Overflow用户

发布于 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中的视频记录我尝试过的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7455016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档