簡體   English   中英

接收/發送數據報套接字數據

[英]Receiving/sending datagram socket data

所以我正在用 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()));

然后我將用兩個坐標創建的點添加到我的程序中。 不知道這個過程哪里出錯了。 有一些新的視角會很酷! 謝謝。

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

這應該是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM