Java 当客户端向服务器发送消息时,消息会被截断

Java 当客户端向服务器发送消息时,消息会被截断,java,sockets,packet,Java,Sockets,Packet,我是多线程新手。我正在尝试在客户端和服务器之间发送消息。当我向服务器发送消息时,我在服务器中的输出应该是“Aji Computer:Thank!:D”,但我得到的是一个截断的数据“Aji Computer:Thank” 服务器代码 public QuoteServerThread(String name) throws IOException { super(name); socket = new DatagramSocket(4445); byte[] buf = new byte

我是多线程新手。我正在尝试在客户端和服务器之间发送消息。当我向服务器发送消息时,我在服务器中的输出应该是“Aji Computer:Thank!:D”,但我得到的是一个截断的数据“Aji Computer:Thank”

服务器代码

    public QuoteServerThread(String name) throws IOException {
super(name);
socket = new DatagramSocket(4445);

 byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);

in.close();

socket.receive(packet);

String dString = "Wassup " + packet.getAddress().getHostName() + "!";
//if (in == null) dString = new Date().toString();
//else dString = getNextQuote();
buf = dString.getBytes();
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet);

//THIS IS WHERE IM SUPPOSE TO PRINT "Aji Computer: Thanks! :D". But it prints out wrongly
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println(received);   
socket.close();
客户端代码

   DatagramSocket socket = new DatagramSocket();
    byte[] buf = new byte[256];
    InetAddress address = InetAddress.getByName("Aji Computer");
    DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445);
    socket.send(packet);
    packet = new DatagramPacket(buf, buf.length);
    socket.receive(packet);
    String received = new String(packet.getData(), 0, packet.getLength());
    System.out.println("Server: " + received);

    //THIS IS WHERE I SENT MY "Aji Computer: Thanks! :D" PACKET TO SERVER.
    buf = new byte[256];
    String str = "Aji Computer: Thanks! :D";
    buf = str.getBytes();
    packet = new DatagramPacket(buf, buf.length, address, 4445);
    socket.send(packet);
    socket.close();
}


只是想让您知道,这段代码来自Oracle。我修改了一点以便知道它是如何工作的。

您将字节数组的大小从256字节重新分配到:
buf=dString.getBytes()packet=newdatagrampacket(buf,buf.length)接收该数据包
这使用了
dString.getBytes()
的长度,而不是
byte[256]
我假设
dString.getBytes()
的空间比“Aji计算机:谢谢!”

尝试将字节数组重新指定为其原始值:

buf = new byte[256];

编辑:从上面删除了“byte”

您将字节数组的大小从256字节重新分配到:
buf=dString.getBytes()packet=newdatagrampacket(buf,buf.length)接收该数据包
这使用了
dString.getBytes()
的长度,而不是
byte[256]
我假设
dString.getBytes()
的空间比“Aji计算机:谢谢!”

尝试将字节数组重新指定为其原始值:

buf = new byte[256];


编辑:从上面删除了“byte”

请花时间写出完整的句子。此外,这与multi-threading.Oops无关。sry。我英语不好。哦,不是多线程吗?我是sry。我假设当多个客户端连接到一个服务器时,这就是多线程。谢谢你的编辑。非常感谢。糟糕的英语在这里不是问题(有很多人愿意帮忙!),但是说“every1”、“Juz”和“msg”这样的话听起来好像你不太关心读者键入实际单词,即使你知道实际单词是什么。StackOverflow不是一般的互联网论坛,所以请务必阅读常见问题解答。欢迎来到这个网站!多线程是在一台计算机上运行并发操作(即多线程)。你说的是套接字通信。虽然服务器经常使用多线程来处理多个客户端,但您的问题实际上与此无关。请花时间写出完整的句子。此外,这与multi-threading.Oops无关。sry。我英语不好。哦,不是多线程吗?我是sry。我假设当多个客户端连接到一个服务器时,这就是多线程。谢谢你的编辑。非常感谢。糟糕的英语在这里不是问题(有很多人愿意帮忙!),但是说“every1”、“Juz”和“msg”这样的话听起来好像你不太关心读者键入实际单词,即使你知道实际单词是什么。StackOverflow不是一般的互联网论坛,所以请务必阅读常见问题解答。欢迎来到这个网站!多线程是在一台计算机上运行并发操作(即多线程)。你说的是套接字通信。虽然服务器经常使用多线程来处理多个客户端,但您的问题实际上与此无关。嘿,谢谢您的建议。但是调用'byte[]buf=新字节[256];'再次将导致错误。因为它已经在代码顶部定义。@用户:从中删除
byte[]
,它将被编译。很抱歉造成混淆,我不认为这不清楚,我会在上面编辑。修复了它。非常感谢亨特·麦克米伦和亚当!Stackoverflow真是太棒了!嘿,谢谢你的建议。但是调用'byte[]buf=新字节[256];'再次将导致错误。因为它已经在代码顶部定义。@用户:从中删除
byte[]
,它将被编译。很抱歉造成混淆,我不认为这不清楚,我会在上面编辑。修复了它。非常感谢亨特·麦克米伦和亚当!Stackoverflow真是太棒了!