当前位置: 首页 > 知识库问答 >
问题:

接收/发送数据报套接字数据

郎健柏
2023-03-14

因此,我正在用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);
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个答案

艾晋
2023-03-14
String data = new String(buffer, "UTF-8");

这应该是

String data = new String(packet.getData(), packet.getOffset(), packet.getLength(), "UTF-8");
 类似资料:
  • 如何将数据从PHP页面发送到TCP端口? 我正在使用它,但我不能使用任何数据!还有,你知道我怎么才能暂停吗? 有什么问题?

  • 问题内容: 我正在使用套接字连接我的Android应用程序(客户端)和Java后端服务器。每次与服务器通信时,我都希望从客户端发送两个数据变量。 1)某种消息(由用户通过界面定义) 2)消息的语言(由用户通过界面定义) 我该如何发送这些消息,以便服务器将每个消息解释为一个单独的实体? 在读取了服务器端的数据并做出了适当的结论之后,我想向客户端返回一条消息。(我想我会没事的) 因此,我的两个问题是如

  • 我试着做一个简单的服务器-客户机套接字通信,但服务器似乎无法正常工作。无论何时发送或接收,我都会收到此错误: 非插座上的插座操作:非插座上的插座操作 奇怪的是,这只会在服务器发送时出现。客户似乎还可以:

  • 我必须对FTP服务器进行编码,而且我在数据传输方面遇到了问题。 我在linux上使用ftp命令来测试它,我目前正在使用,它发送工作目录中的文件/目录列表。一切正常(ftp打印文件列表),除了ftp打印以下警告: 我想删除该警告,我认为ftp需要二进制数据,但我不知道如何通过套接字发送这样的数据,我目前正在使用最基本的方式发送结果:

  • 我正在构建一个简单的客户端-服务器多人游戏,我想连接UDP套接字。但是,当我调用方法时,它会生成

  • 我想使用Qt UDP(不是TCP)套接字传输文件。所以我这样写代码: 看来要传输的Qt UDP数据包的最小大小是8192字节。接收方总是得到第一个数据包,但不能接收其他数据包。 我对Qt和网络编程的经验很少,所以我不知道我的猜想对不对。你能告诉我如何改变这些代码来支持在第一个数据包之后接收数据包,这样我就可以传输大数据了吗?