2014-10-08 112 views
0

所以我正在做一个Java程序,通过DatagramSocket和DatagramPacket的帮助发送和接收数据。问题是,什么地方,当我发送数据/接收它之间 - 的数据变成了要在节目中我要送它也不同,但只在某些情况下是这样的:接收/发送数据报套接字数据

Sending: 378 Receiving: 3786 
Sending: 374 Receiving: 3742 
Sending: 360 Receiving: 3604 

但作品有时,在这样的情况:

Sending: 376 Receiving: 376 
Sending: 372 Receiving: 372 
Sending: 344 Receiving: 344 

我送两个坐标,先将其转换为字符串:

String message = Integer.toString(coord1) + " " + Integer.toString(coord2); 

然后字符串转换为字节数组能够发送它与一个DatagramPacket类:

byte[] b = message.getBytes(Charset.forName("UTF-8")); 
DatagramPacket packet = new DatagramPacket(b, b.length, remoteHost, remotePort); 

try { 
    datagramSocket.send(packet); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

这是我的线程接收数据:

private DatagramSocket dSocket; 
private DatagramPacket packet; 
private byte[] buffer; 
private PaintProgram prog; 

public ReceiverThread(int myPort, PaintProgram prog) { 
    this.prog = prog; 

    try { 
     buffer = new byte[256]; 
     dSocket = new DatagramSocket(myPort); 
     packet = new DatagramPacket(buffer, buffer.length); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

    this.start(); 
} 

@Override 
public void run(){ 
    do{ 
     try { 
      dSocket.receive(packet); 
      String data = new String(buffer, "UTF-8"); 
      prog.handlePacket(data); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    while(!this.currentThread().isInterrupted()); 
} 

这是我的方法 “处理” 这是收到的数据包:

String[] xy = data.split(" "); 
Point point = new Point(Integer.parseInt(xy[0].trim()), Integer.parseInt(xy[1].trim())); 

然后,添加用我的程序的两个坐标创建的点。我不知道在这个过程中哪里出了问题。用一些新的视角会很酷!谢谢。

+1

虽然我不知道答案,但Wireshark是一个程序,如果你正在开发自己的网络协议,它是必不可少的,它应该帮助你诊断这个问题太。 – biziclop 2014-10-08 17:00:03

+0

似乎你需要考虑你收到的数据的长度。作为'DatagramSocket#receive(DatagramPacket)'状态的javadoc _数据报包对象的长度字段包含接收到的消息的长度_ – 2014-10-08 17:16:08

回答

1
String data = new String(buffer, "UTF-8"); 

这应该是

String data = new Strung(packet.getData(), packet.getOffset(), packet.getLength(), "UTF-8"); 
+0

非常感谢! :) – Lemaru 2014-10-08 17:52:31

相关问题