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