Android TCP Socket 连接不上PC
这两天想尝试编写个类似QQ的app,app可以通过TCP套接字相互连接,一方面可以自己做服务端,其他app可以连接到自己,自己也可以切换成客户端模式,去连接到其他开启服务端的app。由于没有编过Android的套接字程序,所以先将以前的Java的简单TCP连接的客户端改到Android程序。但是真机调试建立连接一直失败。考虑可能手机与PC网段不一致所以,无法连接。所以,多次不成功,就暂时放下,将app增加服务器能力,接受监听并开启线程管理socket连接。这里也将监听accept()也放到一个线程执行。开发完毕根据读取手机的ip让两台手机都下载这个app,再尝试相互连接。
这里的问题:
1.在未开启WiFi情况下,有一台手机读取的ip是IPv6并且末尾加了几个不明字母。如果开启WiFi,读取的就是正常的移动分陪的地址比如10.61.169.182
2.在开始app调试的时间每次读取的本地手机ip地址(GPRS)都变化,查了下知道是移动每次连接都是动态分配的,可后来每次到还有固定了。。。
3.这个就是真正关键的问题了,两台手机一台做服务器,一台做客户端,也还是无法连接。那么是IP的问题吗,究竟Android的TCP IP地址应该是什么?后来,令写了个Android程序连接PC来测试问题,果然是最开始建立连接就未成功,所以有空异常。
嗯,这是我的问题,如果有人知道怎么解决或有相似的问题的经验,请回复我,谢谢了!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
真正的原因找到了,我虽然另外开启了线程来实现但是,我还是通过按钮来建立连接,相当于还是在主线程中使用socket,而这是Android现在所不容许的。正确做法是通过handler或者启动后台服务发送和接受广播方式来建立和释放连接以及传递消息。
一般类似的功能是通过服务器转发实现的。可以只在连接时客户端A向服务器端发请求获取B的IP,然后通过获取到的B的ip连接到B。或者是全程都通过服务器转发。这样能实现内网的穿透。