Android UDP 客户端

Android UDP Client

所以我为 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" />

这是调试img:

如您所见,"Packet sent" 文本不在 logcat 中。所以问题可能出在 send() 函数上。知道可能是什么问题吗?

永远不会 运行 在主线程上联网。不要做 Mark 建议的工作。

发送数据时,您应该使用 ASyncTAsk 或线程。

这是一个非常简单的线程函数:

Thread sendDate = new Thread() {
@Override
public void run() {
    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();
        }
    }
    }
};
sendDate.start(); 

如果你想告诉用户数据是否已发送,那么你应该使用 ASyncTask