当前位置: 代码迷 >> Android >> Android建立Socket连接出错
  详细解决方案

Android建立Socket连接出错

热度:99   发布时间:2016-04-28 03:08:47.0
求助:Android建立Socket连接出错
本帖最后由 razor20060930 于 2012-08-09 12:11:16 编辑
各位大侠好。 我在尝试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();
  相关解决方案