2014-10-08 109 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

相關問題