我希望讲一个文件的内容使用datagramSocket发送,我使用BufferedReader读取内容,将内容保存到String中,并自动处理换行,但是发送到对方显示,回车换行没有显示,显示的是小黑方块,请问怎么解决?谢谢了啊
BufferedReader br = new BufferedReader(new FileReader(file));
String line,content="";
while((line = br.readLine())!=null){
content = content+line+"\r\n"; //每次读取一个数据然后将自动添加换行
}
BufferedReader br = new BufferedReader(new FileReader(file));
String line,content="";
while((line = br.readLine())!=null){
content = content+line+"\r\n"; //每次读取一个数据然后将自动添加换行
}
这个是我写的用来发送内容的datagramSocketpublic void sendMessage(InetAddress host,int port,String message) throws IOException{
byte[] buffer = message.getBytes();
DatagramPacket datagram = new DatagramPacket(buffer,buffer.length,host,port);
System.out.println("send");
System.out.println(new String(buffer));
this.send(datagram);
}
public String receiverMessage() throws IOException{
byte[] buffer = new byte[MAX_LEN];
DatagramPacket datagram = new DatagramPacket(buffer,buffer.length);
this.receive(datagram);
System.out.println("receive");
System.out.println(new String(buffer));
return new String(buffer);
}这个是读取的BufferedReader
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while((line = br.readLine())!=null){
this.content = content+line+System.getProperty("line.separator");
}
另一端 String message = socket.receiverMessage();
System.out.println(message);
显示的都有问题
只显示一部分
后面的没有了
尽量使用JDK封装的
Reader和Writer是将IO数据转换成字符进行处理的。
其次,一个UDP报文,发送一个文件的所有内容,会有一个显著的缺点,
就是,大文件无法进行传输。推荐楼主,不要使用Reader和Writer类,要针对二进制数据进行传输,
就不会有字符乱码的问题了,即使有也不是传输过程中造成的。针对一个文件一个包(微小文件)尝试修改如下:
public void sendMessage(InetAddress host,int port,byte [] message) throws IOException{
DatagramPacket datagram = new DatagramPacket(message,message.length,host,port);
this.send(datagram);
}
public byte [] receiverMessage() throws IOException{
byte[] buffer = new byte[MAX_LEN];
DatagramPacket datagram = new DatagramPacket(buffer,buffer.length);
this.receive(datagram);
return datagram.getData();
}
文件的读取和写入,可以考虑://从文件中读取发送数据
File inFile = new File("in_file.txt");
byte [] message = new byte[(int)inFile.length()];
new FileInputStream(file).read(message);
// TODO 后面可以调用发送函数进行发送//将收到的数据写入文件
byte [] message = receiverMessage();
new FileOutputStream("out_file.txt").write(message);以上代码仅供参考