求助:Android建立Socket连接出错

razor20060930 2012-08-09 12:04:31
各位大侠好。 我在尝试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不能创建成功,还望大侠指点。
...全文
1317 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq5w 2014-12-28
  • 打赏
  • 举报
回复
android 3.0 以后不允许这种在ui线程上面的耗时操作了。 StrictMode 这个类解决着这种问题特别的方便,楼主可以尝试下以下的代码! if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); }
razor20060930 2012-08-09
  • 打赏
  • 举报
回复
准备用TCP传几个字节的控制命令。
现在卡在Android系统上创建Socket连接失败上。
razor20060930 2012-08-09
  • 打赏
  • 举报
回复
在Android4.0虚拟机上运行,现象相同。 一点连接按钮就挂掉。
日志如下:
08-05 10:41:09.591: D/dalvikvm(1650): Not late-enabling CheckJNI (already on)
08-05 10:41:15.294: D/gralloc_goldfish(1650): Emulator without GPU emulation detected.
08-05 10:41:18.603: D/AndroidRuntime(1650): Shutting down VM
08-05 10:41:18.603: W/dalvikvm(1650): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
08-05 10:41:18.873: E/AndroidRuntime(1650): FATAL EXCEPTION: main
08-05 10:41:18.873: E/AndroidRuntime(1650): android.os.NetworkOnMainThreadException
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
08-05 10:41:18.873: E/AndroidRuntime(1650): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:74)
08-05 10:41:18.873: E/AndroidRuntime(1650): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
08-05 10:41:18.873: E/AndroidRuntime(1650): at libcore.io.IoBridge.connect(IoBridge.java:112)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.net.Socket.startupSocket(Socket.java:566)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.net.Socket.tryAllAddresses(Socket.java:127)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.net.Socket.<init>(Socket.java:177)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.net.Socket.<init>(Socket.java:149)
08-05 10:41:18.873: E/AndroidRuntime(1650): at edu.nwpu.cis.androidtcptest.MainActivity$2.onClick(MainActivity.java:119)
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.view.View.performClick(View.java:3480)
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.view.View$PerformClick.run(View.java:13983)
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.os.Handler.handleCallback(Handler.java:605)
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.os.Handler.dispatchMessage(Handler.java:92)
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.os.Looper.loop(Looper.java:137)
08-05 10:41:18.873: E/AndroidRuntime(1650): at android.app.ActivityThread.main(ActivityThread.java:4340)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.lang.reflect.Method.invokeNative(Native Method)
08-05 10:41:18.873: E/AndroidRuntime(1650): at java.lang.reflect.Method.invoke(Method.java:511)
08-05 10:41:18.873: E/AndroidRuntime(1650): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-05 10:41:18.873: E/AndroidRuntime(1650): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-05 10:41:18.873: E/AndroidRuntime(1650): at dalvik.system.NativeStart.main(Native Method)
08-05 10:41:24.263: I/Process(1650): Sending signal. PID: 1650 SIG: 9
深夜深几许 2012-08-09
  • 打赏
  • 举报
回复
通信用的是什么协议呢?总的分为字节流通信,字符流通信,这个一定要弄清楚,另外你可以询问服务器方面是不是真的没有建立socket连接
razor20060930 2012-08-09
  • 打赏
  • 举报
回复
测试通过。
已经能够发送控制指令了。
多谢各位指点。
razor20060930 2012-08-09
  • 打赏
  • 举报
回复
谢谢各位。
正在调试通信线程。 稍后散分
AMinfo 2012-08-09
  • 打赏
  • 举报
回复
出错的原因是,你在主线程上进行了网络通讯,出错提示里面已经告诉你了:NetworkOnMainThreadException

解决办法,将网络通讯的代码放到线程里面进行


new Thread(){
@Override
public void run()
{
//你的socket代码放这里

}
}.start();
grpubr 2012-08-09
  • 打赏
  • 举报
回复
4.0以后不能在ui线程上进行耗时操作.

NetworkOnMainThreadException 一看这个异常的名字就知道了啊.

把网络操作写在后台线程里.

80,351

社区成员

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

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