从android平台发送UDP数据包
我正在尝试在android平板电脑上构建UDP客户端。应用程序可以创建套接字,但当我尝试发送它时:从android平台发送UDP数据包,android,udp,Android,Udp,我正在尝试在android平板电脑上构建UDP客户端。应用程序可以创建套接字,但当我尝试发送它时: public void SendMessage( String message ) { sendBuffer = message.getBytes(); packet = new DatagramPacket( sendBuffer, sendBuffer.length, address, 4445 ); //packet = new Da
public void SendMessage( String message )
{
sendBuffer = message.getBytes();
packet = new DatagramPacket( sendBuffer, sendBuffer.length, address, 4445 );
//packet = new DatagramPacket( sendBuffer, sendBuffer.length, address, port );
try
{
socket.send( packet );
}
catch (IOException ioe)
{
Log.d( "NETWORK", "Failed to send UDP packet due to IOException: " + ioe.getMessage() );
ioe.printStackTrace();
}
catch( Exception e )
{
Log.d( "NETWORK", "Failed to send UDP packet due to Exeption: " + e.getMessage() );
e.printStackTrace();
}
}
Eclipse弹出一个新窗口,上面写着“未找到源代码”,我在LogCat中打印了这个窗口:
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)
at ...
我想知道我使用的端口是否被阻塞,或者是否有什么东西阻塞了我的UDP连接(因为我尝试了许多不同的端口,但结果都是一样的)。我这样问是因为LogCat(BlockGuardOS)可能表示它正在阻止一些输入/输出
这是实际的初始化过程,如下所示:
public ClientSocketThread( String address, int port )
{
this.port = port;
try
{
this.address = InetAddress.getByName( address );
Log.d( "NETWORK", "Address successfully resolved" );
}
catch( UnknownHostException ue )
{
ue.printStackTrace();
Log.d( "NETWORK", "Failed to resolve ip address due to UnknownException: " + ue.getMessage() );
}
try
{
this.socket = new DatagramSocket();
Log.d( "NETWORK", "UDP Socket successfully created" );
}
catch( SocketException se )
{
Log.d( "NETWORK", "Failed to create socket due to SocketException: " + se.getMessage() );
se.printStackTrace();
}
}
不再允许您从主(UI)线程进行联网。文档中总是警告您不要使用它,但现在它已被主动捕获
这个话题在这里和其他来源中已经被讨论过很多次了
不再允许您从主(UI)线程进行联网。文档中总是警告您不要使用它,但现在它已被主动捕获
本主题已在SO和其他来源中被多次提及。您是否尝试通过移动网络发送?大多数移动网络都会阻止UDP数据包,好吧。不,我是通过无线网络连接到路由器的,你有没有可能通过移动网络发送?大多数移动网络都会阻止UDP数据包,AFAIK。不,我通过wifi在路由器上连接。对于找到此线程的未来用户,我提供了一个很好的示例,说明如何正确实现异步任务,使您不在主UI线程上处理。对于找到此线程的未来用户,提供了一个很好的示例,说明如何正确实现AsyncTask,从而使您不在主UI线程上进行处理。
android.os.NetworkOnMainThreadException