【发布时间】:2015-12-29 20:57:32
【问题描述】:
所以我为 android 制作了一个简单的 UDP 客户端,但由于某种原因它不想工作。我已经为此苦苦挣扎了 5 个小时,但我找不到问题所在。我什至查看了互联网上几乎所有的教程,比较代码,但我没有运气。
String serverString = "192.168.1.109";
int port = 7777;
Log.d("adam", "Debug");
DatagramSocket socket = null ;
String msg = "Hello World!";
try {
socket = new DatagramSocket() ;
InetAddress host = InetAddress.getByName(serverString);
byte [] data = msg.getBytes() ;
DatagramPacket packet = new DatagramPacket( data, data.length, host, port );
Log.d("adam", "Debug2");
socket.send(packet) ;
Log.d("adam", "Packet sent" );
} catch( Exception e )
{
Log.d("adam", "Exception");
Log.e("adam", Log.getStackTraceString(e));
}
finally
{
if( socket != null ) {
socket.close();
}
}
我的主要节日:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
这里是调试图:
如您所见,“数据包已发送”文本不在 logcat 中。所以问题可能出在send() 函数上。知道可能是什么问题吗?
【问题讨论】:
-
默认情况下不允许主线程上的网络。有特殊功能可以改变这种行为。您可以通过
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);禁用该严格模式 -
嗯,我现在知道了。刚刚在android上发现了一个网络问题的线程。他们在那里有相同的解决方案:D 我对其进行了测试并且工作正常。 (链接:stackoverflow.com/questions/16439587/…)这是解决此问题的最简单方法吗?感谢您的帮助。 :) 抱歉打开这个帖子,但我整天忙于解决这个问题,我坚持我永远不会找出问题所在。
-
最好避免在生产应用程序的 Android 主 (UI) 线程上执行任何 I/O。阻塞的套接字调用将导致应用程序响应能力差。使用 AsyncTask 或专用线程来实现您的客户端协议。
标签: javascript android sockets udp udpclient