繁体   English   中英

如何在我的Android应用程序中打开ServerSocket?

[英]How do I open up a ServerSocket in my android application?

好的,所以我做的事似乎应该很容易。 我基本上试图打开ServerSocket连接,然后等待客户端连接。

这是我的代码。

ServerSocket serverSocket = new ServerSocket(6543);
Socket clientSocket = serverSocket.accept();

每当我的代码命中,serverSocket.accept();,我抛出以下异常。

bind failed: EADDRINUSE (Address already in use)

显然我的下一步是检查并查看另一个端口是否可行,但事实并非如此。 接下来我重新启动设备并尝试运行应用程序,我得到了相同的异常。 我已经给了我的应用程序INTERNET权限,设备已根植。

这是我出现的网络接口。

lo: ::1%1
lo: 127.0.0.1
eth0: //IPV6 address 
eth0: 192.168.1.127

编辑1

这是我在调试时得到的serverSocket对象信息。

ServerSocket[addr=192.168.1.121/192.168.1.121,port=0,localport=1234]

编辑2

我的ServerSocket中有以下可用的构造函数

new ServerSocket(int port)
new ServerSocket(int port, int backlog)
new ServerSocket(int port, int backlog, InetAddress localAddress)

我尝试使用第3个构造函数和相同的异常。

new ServerSocket(4567, 0, InetAddress.getLocalHost());

好吧,所以我终于弄清楚为什么我的应用程序抛出异常,如果有人对此有一些反馈或想提供一个答案,为什么会发生这种情况。 我将不胜感激。

所以在我创建的Thread中,我需要回发到主线程,根据服务器连接发生的情况更新一些TextView。 好吧,因为我无法从我自己创建的线程更新主线程,我需要向该线程添加一个Handler对象以更新UI。 删除该Handler完全允许我的应用程序成功创建ServerSocket而不会抛出异常。

Handler是否以某种方式预先运行代码或者在这里发生了什么?

编码。

RemoteServerRunnable test = new RemoteServerRunnable();
Handler handler = new Handler();
handler.post(test);
test.start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM