Java 当客户端向服务器发送消息时,消息会被截断
我是多线程新手。我正在尝试在客户端和服务器之间发送消息。当我向服务器发送消息时,我在服务器中的输出应该是“Aji Computer:Thank!:D”,但我得到的是一个截断的数据“Aji Computer:Thank” 服务器代码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
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真是太棒了!