gpt4 book ai didi

java - 无法将UDP数据包中的数据转换为使用Java发送的初始数据

转载 作者:行者123 更新时间:2023-12-02 07:45:49 25 4
gpt4 key购买 nike

我正在编写一个 UDP 客户端来将文件传输到 UDP 服务器。首先,我尝试测量文件的长度,除以 UDP 数据包中要发送的缓冲区长度,以获得需要发送的数据包数量。我首先将此号码发送到服务器以进行确认。但在服务器端,从接收数据包的字节数组到初始数字的转换失败了。谁能帮我解决这个问题吗?这是我在客户端的代码:

    DatagramSocket socket=new DatagramSocket(); 
File f = new File(filename);
long fileSize = f.length();
byte[] buffer = new byte[16384];
long packetNumber = (fileSize/(buffer.length))+1;
DatagramPacket sendPacket=new DatagramPacket(buffer,buffer.length,addr,srvPort);
String str=Long.toString(packetNumber);
buffer = str.getBytes();
socket.send(sendPacket);

这是服务器端的代码:

    DatagramSocket socket=new DatagramSocket(port);     
byte[] buffer=new byte[16384];
DatagramPacket receivePacket=new DatagramPacket(buffer, buffer.length);
while(true)
{
socket.receive(receivePacket);
if (receivePacket.getData().toString().trim()!=null)
{

String str=receivePacket.getData().toString();
System.out.println(str);
long pcount=Long.parseLong(str);
System.out.println(pcount+" packets to be received.");
break;
}
}

但是在服务器端,变量 pcount 总是无法解析,当我尝试打印出 str 时,它会写出一些“[B@60991f”或其他东西,很奇怪。

最佳答案

这段代码没有任何意义。

大多数网络不允许您可靠地发送超过 534 字节的数据报。

目前,您正在发送 16384 字节的零值,因为您没有将任何内容放入缓冲区:相反,您在创建 DatagramPacket 之后创建了一个新缓冲区。所以您还没有发送任何内容。

而且您也还没有收到任何东西。 String.trim() 的结果不能为 null。您必须在每次 receive() 之前重置 DatagramPacket 中的字节数组,因为它会缩小到实际接收到的数据包的大小,因此除非您重置它,否则它会变得越来越小。字节数组上的 toString() 的结果不包含其内容,因此解析它是徒劳的。

您需要学习几个基本的 Java 编程概念:太多了,无法在这里回答。

关于java - 无法将UDP数据包中的数据转换为使用Java发送的初始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10879035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com