鱼C论坛

 找回密码
 立即注册
查看: 780|回复: 1

[已解决]大佬们,求助一道java的网络编程

[复制链接]
发表于 2023-2-10 23:10:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

        byte[] bytes = new byte[1024];

        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
最佳答案
2023-5-18 19:46:19
你没有提供报错信息,因此很难确定错误的原因。请在问题中提供具体的报错信息,这样我才能给出更准确的答复。

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

  • 因为调用了 socket.connect() 方法,所以发送数据时需要使用 socket.send() 方法而不是 socket.sendto() 方法。如果你使用了错误的发送方法,那么就会抛出错误。
  • 在发送数据之前,你将 DatagramPacket 对象的数据部分填充了多余的空格,如果此时数据包长度超过了原始字节数组的长度,那么就会抛出 IndexOutOfBoundsException 错误。因此,需要检查数据包长度是否超出原始数组长度的限制,并仅向数据包中添加必要的空格。
  • 在发送数据包之前,需要清空数据包的缓冲区,否则将会发送包含有旧数据的数据包。可以通过调用 DatagramPacket.setData() 或 DatagramPacket.setLength() 方法来清空缓冲区。


希望这些信息对你有所帮助。如果你能够提供更多的具体信息和错误信息,我也可以给出更加详细的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-18 19:46:19 | 显示全部楼层    本楼为最佳答案   
你没有提供报错信息,因此很难确定错误的原因。请在问题中提供具体的报错信息,这样我才能给出更准确的答复。

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

  • 因为调用了 socket.connect() 方法,所以发送数据时需要使用 socket.send() 方法而不是 socket.sendto() 方法。如果你使用了错误的发送方法,那么就会抛出错误。
  • 在发送数据之前,你将 DatagramPacket 对象的数据部分填充了多余的空格,如果此时数据包长度超过了原始字节数组的长度,那么就会抛出 IndexOutOfBoundsException 错误。因此,需要检查数据包长度是否超出原始数组长度的限制,并仅向数据包中添加必要的空格。
  • 在发送数据包之前,需要清空数据包的缓冲区,否则将会发送包含有旧数据的数据包。可以通过调用 DatagramPacket.setData() 或 DatagramPacket.setLength() 方法来清空缓冲区。


希望这些信息对你有所帮助。如果你能够提供更多的具体信息和错误信息,我也可以给出更加详细的解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表