模拟器如何通过UDP访问开发机的指定端口?

imA 2012-05-17 01:38:43
我写了一个avtivity,代码如下:

                super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button reg = (Button) findViewById(R.id.regButton);
reg.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
EditText hostEle = (EditText) findViewById(R.id.apnHost);
Editable host = hostEle.getText();
EditText portEle = (EditText) findViewById(R.id.apnPort);
Editable port = portEle.getText();
Log.i("liangyf.mobile.terminal", "APN[" + host.toString() + ","
+ port + "]");
try {
DatagramSocket socket = new DatagramSocket(4567);
InetAddress serverAddress = InetAddress
.getByName("10.0.2.2");
String str = "hello";
byte data[] = str.getBytes();
DatagramPacket packet = new DatagramPacket(data,
data.length, serverAddress, 9999);
socket.send(packet);
} catch (SocketException e) {
Log.e("liangyf.mobile.terminal", "发生异常:", e);
} catch (IOException e) {
Log.e("liangyf.mobile.terminal", "发生异常:", e);
}
}
});


同时我在开发机(运行模拟器的机器)上开启了9999端口侦听,但是当运行app进行连接时发生错误:
05-17 05:35:28.122: E/AndroidRuntime(624): FATAL EXCEPTION: main
05-17 05:35:28.122: E/AndroidRuntime(624): android.os.NetworkOnMainThreadException
05-17 05:35:28.122: E/AndroidRuntime(624): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
05-17 05:35:28.122: E/AndroidRuntime(624): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
05-17 05:35:28.122: E/AndroidRuntime(624): at libcore.io.IoBridge.sendto(IoBridge.java:463)
05-17 05:35:28.122: E/AndroidRuntime(624): at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)
05-17 05:35:28.122: E/AndroidRuntime(624): at java.net.DatagramSocket.send(DatagramSocket.java:287)
05-17 05:35:28.122: E/AndroidRuntime(624): at liangyf.mobile.terminal.TerminalSimulatorActivity$1.onClick(TerminalSimulatorActivity.java:44)
05-17 05:35:28.122: E/AndroidRuntime(624): at android.view.View.performClick(View.java:3511)
05-17 05:35:28.122: E/AndroidRuntime(624): at android.view.View$PerformClick.run(View.java:14105)
05-17 05:35:28.122: E/AndroidRuntime(624): at android.os.Handler.handleCallback(Handler.java:605)
05-17 05:35:28.122: E/AndroidRuntime(624): at android.os.Handler.dispatchMessage(Handler.java:92)
05-17 05:35:28.122: E/AndroidRuntime(624): at android.os.Looper.loop(Looper.java:137)
05-17 05:35:28.122: E/AndroidRuntime(624): at android.app.ActivityThread.main(ActivityThread.java:4424)
05-17 05:35:28.122: E/AndroidRuntime(624): at java.lang.reflect.Method.invokeNative(Native Method)
05-17 05:35:28.122: E/AndroidRuntime(624): at java.lang.reflect.Method.invoke(Method.java:511)
05-17 05:35:28.122: E/AndroidRuntime(624): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-17 05:35:28.122: E/AndroidRuntime(624): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-17 05:35:28.122: E/AndroidRuntime(624): at dalvik.system.NativeStart.main(Native Method)


我已经对app添加了android.permission.INTERNET权限:
<uses-permission android:name="android.permission.INTERNET"/>



有知道的告诉我怎么回事?
...全文
210 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
念茜 2012-05-17
  • 打赏
  • 举报
回复
主线程存在因为网络异常而被长时间阻塞的隐患,所以不允许在主线程中进程网络访问,防止阻塞UI的更新响应
imA 2012-05-17
  • 打赏
  • 举报
回复
解决了,4.0平台默认不允许在主线程中进行网络访问

80,472

社区成员

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

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