各位大侠好。 我在尝试Pad和主机之间通过Socket通信,目前出现错误:Pad上客户端无法建立Socket连接。
测试环境:
服务器:Windows XP ,IP=192.168.1.221, Port=6666,server端程序采用C++开发。在Android开发上位机上采用Java.net包开发一个客户端进行测试,能够运行;
客户端:联想乐PadA2107 Android4.0.3, WIFI联网, IP=192.168.1.103, Port=6666
客户端程序如下:
1. 布局:
在MainAction中加入了Button:btnTryOnce和EcitText:edtRxMsg
2. 在Manifest中授权:
<uses-permission android:name="android.permission.INTERNET"/>
3. OnCreate函数中进行了事件绑定:
btnTryOnce =(Button)findViewById(R.id.btnTryOnce);
//绑定事件响应回调函数
btnTryOnce.setOnClickListener(clicklistener_TryOnce);
4. 在btnTryOnce的按钮事件中试图建立Socekt连接,并发送hello
OnClickListener clicklistener_TryOnce = new OnClickListener(){
public void onClick(View arg0) {
// TODO Auto-generated method stub
try{
Socket sk=new Socket("192.168.1.221",6666);
sk.setSoTimeout(10000);
Toast.makeText(getApplicationContext(),
"Socket creation success",
Toast.LENGTH_LONG).show();
BufferedReader brRx = new BufferedReader( new InputStreamReader( sk.getInputStream()));
String line=brRx.readLine();
edtRxMsg.setText(line);
brRx.close();
sk.close();
}catch(UnknownHostException e){
Log.e("Unknown Host","Message from the Server:");
e.printStackTrace();
}catch(IOException e){
Log.e("IO Exception", "Message from the Server:");
e.printStackTrace();
}
}
};
在乐PadA2107上运行,点击按钮btnTryOnce, 程序直接退出。
不知道为何Socket不能创建成功,还望大侠指点。
------解决思路----------------------
4.0以后不能在ui线程上进行耗时操作.
NetworkOnMainThreadException 一看这个异常的名字就知道了啊.
把网络操作写在后台线程里.
------解决思路----------------------
出错的原因是,你在主线程上进行了网络通讯,出错提示里面已经告诉你了:NetworkOnMainThreadException
解决办法,将网络通讯的代码放到线程里面进行
new Thread(){
@Override
public void run()
{
//你的socket代码放这里
}
}.start();