WiBro,用作服务器模块和客户端Nexus Galaxy ICS。 这两台机器都是3g UDP通信。 服务器只返回已经实现的接收数据。
dSocket.send(sendPacket)是一种流畅的沟通方式。 但是,我们遇到了问题。 dSocket.receive(recvPacket)不接收数据。
服务器发送的数据包是错误的?如果客户端收到的数据包有误? 服务器发送数据但是,电信设备是为了保持这种情况吗?
仅发送数据包时,客户端没有问题。 但在接收代码实现后,客户端出现问题。
private class ClientThread implements Runnable{
@SuppressWarnings("finally")
@Override
public void run() {
// TODO Auto-generated method stub
DatagramSocket dSocket = null;
try{
InetAddress serverAddr = InetAddress.getByName(serverIpAddress.toString());
Log.d(TAG, "Connecting");
Log.d(TAG, "IP :::: " + serverAddr.toString());
dSocket = new DatagramSocket(SERVERPORT);
dSocket.setSoTimeout(5000);
byte[] arr_RecvPacket = new byte[1024];
connected = true;
while(connected){
try{
Log.d(TAG, "Sending Command :::: ( " + String.valueOf(i));
String strPacket = "Hey Server ( " + String.valueOf(i);
byte[] arr_Packet = strPacket.getBytes();
sendPacket = new DatagramPacket(arr_Packet, arr_Packet.length, serverAddr, SERVERPORT);
dSocket.send(sendPacket);
Log.d(TAG, "C:Send");
i++;
Log.d(TAG, "C:Make Recv Packet....");
recvPacket = new DatagramPacket(arr_RecvPacket, arr_RecvPacket.length);
Log.d(TAG, "C:Recving...");
dSocket.receive(recvPacket);
handler.sendEmptyMessage(0x01);
Thread.sleep(4000);
}catch(Exception e){
e.printStackTrace();
Log.d(TAG, "S:Error");
}
}
Log.d(TAG, "S:DataSocket close");
dSocket.close();
}catch(Exception e){
Log.d(TAG, "C:Error");
e.printStackTrace();
connected = false;
}finally{
connected = false;
if(dSocket != null){
dSocket.close();
}
return;
}
}
}
答案 0 :(得分:0)
服务器发送的数据包是错误的吗?
可能。很难说没有看到它。它应该将回复发送回嵌入在传入数据报中的IP:端口。最简单的方法是重复使用它,只需更改数据。
客户端收到的数据包是错误的吗?
看起来不错。
服务器发送数据但是,电信设备被占用 保持这种情况?
我不知道这意味着什么。