1. 不能在UI线程中写连接之类的耗时操作,所有涉及到从线程读取,耗时操作,需要用一下方法改写
public void disconnected() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
address_tx.setText("client disconnected");
}
});
}
2 .模拟器与真机的host ip地址不一样。。。
解决方案1. 用wifi分享的软件查看android设备的地址
解决方案2.有个超级棒的小方法,可以读取手机的ip地址
public String getIpAddress() {
String ip = "";
try {
Enumeration enumNetworkInterfaces = NetworkInterface
.getNetworkInterfaces();
while (enumNetworkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = enumNetworkInterfaces
.nextElement();
Enumeration enumInetAddress = networkInterface
.getInetAddresses();
while (enumInetAddress.hasMoreElements()) {
InetAddress inetAddress = enumInetAddress
.nextElement();
if (inetAddress.isSiteLocalAddress()) {
ip += inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
ip += "Something Wrong! " + e.toString() + "\n";
}
return ip;
}
3. bindException。。。
杀死进程,重新启动
4. 在台式pc上分享了一个热点 ,查看ip地址为198.168.191.1 改了之后,pc运行服务端,手机运行客户端,失败。......
5. 线程 start之后不自动执行run方法
可能是在UI线程中调用了耗时线程,系统自动不给执行,啊哈哈哈哈哈哈
6. client连接不上server
请求的代码放错地方了,必须在run中被调用或者直接写在run中才有效
socket = new Socket(host, port);
7. 对于一个client来说需要创建一个接收和一个发送handle对象