亦有人 发表于 2023-2-10 23:10:10

大佬们,求助一道java的网络编程

public class UDPReceiverA {
    public static void main(String[] args) throws IOException {

      byte[] bytes = new byte;

      DatagramSocket socket = new DatagramSocket(8888);
      DatagramPacket packet = new DatagramPacket(bytes, 1024);

      socket.receive(packet);

      byte[] data = packet.getData();
      int len = packet.getLength();
      System.out.println(new String(data, 0, len));

      //对接收端发送 “好的,明天见”
//      String str = "好的,明天见";
      byte[] buf = "好的,明天见".getBytes();

      if (buf.length < packet.getLength()) {
            int balenceLen = packet.getLength() - buf.length;
            byte[] b = " ".getBytes();
            for (int i = 0; i < balenceLen; i++) {
                packet.setData(b, buf.length-1, balenceLen);
            }
      }

      packet.setData(buf, 0, buf.length);

      socket.connect(InetAddress.getLocalHost(), 9999);
      socket.send(packet);

      socket.close();
    }
}

为什么会报错1

sfqxx 发表于 2023-5-18 19:46:19

你没有提供报错信息,因此很难确定错误的原因。请在问题中提供具体的报错信息,这样我才能给出更准确的答复。

不过,根据代码推测出可能存在的问题:


[*]因为调用了 socket.connect() 方法,所以发送数据时需要使用 socket.send() 方法而不是 socket.sendto() 方法。如果你使用了错误的发送方法,那么就会抛出错误。

[*]在发送数据之前,你将 DatagramPacket 对象的数据部分填充了多余的空格,如果此时数据包长度超过了原始字节数组的长度,那么就会抛出 IndexOutOfBoundsException 错误。因此,需要检查数据包长度是否超出原始数组长度的限制,并仅向数据包中添加必要的空格。

[*]在发送数据包之前,需要清空数据包的缓冲区,否则将会发送包含有旧数据的数据包。可以通过调用 DatagramPacket.setData() 或 DatagramPacket.setLength() 方法来清空缓冲区。


希望这些信息对你有所帮助。如果你能够提供更多的具体信息和错误信息,我也可以给出更加详细的解答
页: [1]
查看完整版本: 大佬们,求助一道java的网络编程