一个关于android用socket通信时的一个非常奇怪的bug

tyilack_小小黑 2015-05-18 11:09:11
第一个bug:
如下android连接服务端的代码:

try {
Toast.makeText(MainActivity.this, "wwwww", Toast.LENGTH_LONG).show();
Socket socket = new Socket("10.55.44.66", 30003);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = br.readLine();
show.setText(str);
br.close();
socket.close();
} catch (Exception e) {
// TODO: handle exception
}

连接不上服务端,要去掉Toast那条语句才可以。

第二个bug:
如下客户端的代码:

try {
ServerSocket ss = new ServerSocket(30003);
while(true) {
Socket socket = ss.accept();
InetAddress inetAddress = socket.getInetAddress();
System.out.println(inetAddress.getHostAddress());
System.out.println(inetAddress.getHostName());
OutputStream os = socket.getOutputStream();
os.write("睡你妈逼,起来嗨!".getBytes("utf-8"));

os.flush();
os.close();
socket.close();
}
} catch (Exception e) {
// TODO: handle exception
}

虽然连接得上服务端,但是会连续打印出两次ip地址,而没有打印.getHostName(),并且数据传输的时候接收不了,要把相应的android程序先放到后台,然后在重新运行,才可以接收数据。但是我把

System.out.println(inetAddress.getHostName());

这句话去掉就不会出现这种情况,一打开程序数据就传输到了android应用中了。很神奇的bug,个位大神们帮我试试咯,服务端和客户端就上面那两段代码
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hare_ 2015-05-19
  • 打赏
  • 举报
回复
引用 2 楼 public_static 的回复:
错误1:Toast应该运行在UI线程, Network操作应该在非UI线程。你这么混用是不对的。 如果你当前线程是非UI线程,那么你应该用handler或runnable去执行toast。 如果你当前线程是UI主线程,那么你应该修改Network相关代码到新线程中执行。 错误2:连续打印出两次ip地址,是因为getHostAddress和getHostname得到的都是ip地址。猜测你的ServerSocket里面写的是ip地址,入参是端口号。 不是所有ip地址都能转换成DNS域名! 而且!getHostname内部DNS解析是需要时间的。20秒超时(Android socket源码中默认值)或者更久。这行代码把你的socket操作挂起了。
说的很详细,
9468305 2015-05-19
  • 打赏
  • 举报
回复
错误1:Toast应该运行在UI线程, Network操作应该在非UI线程。你这么混用是不对的。 如果你当前线程是非UI线程,那么你应该用handler或runnable去执行toast。 如果你当前线程是UI主线程,那么你应该修改Network相关代码到新线程中执行。 错误2:连续打印出两次ip地址,是因为getHostAddress和getHostname得到的都是ip地址。猜测你的ServerSocket里面写的是ip地址,入参是端口号。 不是所有ip地址都能转换成DNS域名! 而且!getHostname内部DNS解析是需要时间的。20秒超时(Android socket源码中默认值)或者更久。这行代码把你的socket操作挂起了。
东大坡居士 2015-05-18
  • 打赏
  • 举报
回复
toast显示完才会继续执行啊

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧