Android TCP Socket 连接不上PC

tianjiII 发布于 2015/05/24 22:51
阅读 3K+
收藏 1

这两天想尝试编写个类似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来测试问题,果然是最开始建立连接就未成功,所以有空异常。

嗯,这是我的问题,如果有人知道怎么解决或有相似的问题的经验,请回复我,谢谢了!

加载中
0
hawkyoung
hawkyoung

没怎么搞过通讯,给几个建议楼主姑且试试看

  • 首先你的手机连上wifi,跟pc在同一个内网,测试你的手机发的东西能不能在pc的java客户端收到,如果这个都不能,那么Android程序本身有问题(例如漏了加internet权限,这个非常常见)
  • 两台手机都连着wifi并且在不同内网里,需要考虑楼上所说的内网穿透问题
  • 未开启wifi情况下的ip地址试试用手机连接一个显示本机ip的网站看看到底是多少
tianjiII
tianjiII
嗯,测试程序确实忘加internet权限了。PC端有显示连接了。不过我的那个较复杂的程序添加了权限的,,,嗯,可能是程序的问题,我再仔细看看,谢谢啦。
0
秋豪的爸爸
一般类似的功能是通过服务器转发实现的。可以只在连接时客户端A向服务器端发请求获取B的IP,然后通过获取到的B的ip连接到B。或者是全程都通过服务器转发。这样能实现内网的穿透。
0
tianjiII
tianjiII
真正的原因找到了,我虽然另外开启了线程来实现但是,我还是通过按钮来建立连接,相当于还是在主线程中使用socket,而这是Android现在所不容许的。正确做法是通过handler或者启动后台服务发送和接受广播方式来建立和释放连接以及传递消息。
返回顶部
顶部