Message sent in UDP datagram is not sanitized?(在 UDP 数据报中发送的消息没有被清理?)
问题描述
我的代码如下.一切都按照我想要的方式进行,但是当收到我的消息时,它们最后会有很多框,有点像这样消息:你好▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀" 我怎样才能使它接收和打印的只是消息:你好"?我非常感谢任何帮助.
My code is as follows. Everything works the way I want it to, but when my messages are received they have many boxes on the end somewhat like this like this "Message: hello▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀" How can I make it so what is received and printed is only "Message: hello"? I greatly appreciate any help.
import java.io.*;
import java.net.*;
public class UDPChat {
public static void main(String args[]) throws Exception {
new UDPChat();
}
public UDPChat() {
try {
runChat();
} catch (Exception e) {
}}
public void runChat() throws InterruptedException {
Sender sender = new Sender();
Receiver receiver = new Receiver();
sender.start();
receiver.start();
sender.join();
receiver.join();
}
class Receiver extends Thread {
public void run() {
try {
DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
System.out.println("Message: " + sentence);
}
} catch (IOException e) {
}
}
}
class Sender extends Thread {
public void run() {
try {
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
while (true) {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
String message = inFromUser.readLine();
sendData = message.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
}
} catch (IOException e) {
}
}
}
}
推荐答案
String sentence = new String(receivePacket.getData());
常见问题.忽略数据报长度.修复如下:
Usual problem. Ignoring the datagram length. Fix as follows:
String sentence = new String(receivePacket.getData(), receivePacket.getOffset(), receivePacket.getLength());
这篇关于在 UDP 数据报中发送的消息没有被清理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 UDP 数据报中发送的消息没有被清理?
- 未找到/usr/local/lib 中的库 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 转换 ldap 日期 2022-01-01
- 获取数字的最后一位 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01