Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用套接字传输二进制数据_Java_Sockets - Fatal编程技术网

在Java中使用套接字传输二进制数据

在Java中使用套接字传输二进制数据,java,sockets,Java,Sockets,我试图用Java创建一个文件传输的客户机-服务器模型,在该模型中,客户机将读取文件并将数据发送到服务器,服务器将接收数据并将其写入文件。我已经看过这篇文章了,但它涉及C 我编写了一个简单的算法,只要文件连接到服务器,它就会立即发送文件。 这是客户端的代码: import java.io.*; 导入java.net.Socket; 公共类客户端{ 公共静态void main(字符串参数[]){ 试一试{ sockets=newsocket(args[0],Integer.parseInt(args

我试图用Java创建一个文件传输的客户机-服务器模型,在该模型中,客户机将读取文件并将数据发送到服务器,服务器将接收数据并将其写入文件。我已经看过这篇文章了,但它涉及C

我编写了一个简单的算法,只要文件连接到服务器,它就会立即发送文件。
这是客户端的代码:

import java.io.*;
导入java.net.Socket;
公共类客户端{
公共静态void main(字符串参数[]){
试一试{
sockets=newsocket(args[0],Integer.parseInt(args[1]);
System.out.println(“连接到”+s.getRemoteSocketAddress());
DataInputStream din=新的DataInputStream(s.getInputStream());
DataOutputStream dout=新的DataOutputStream(s.getOutputStream());
File File=新文件(args[2]);
FileInputStream fis=新的FileInputStream(文件);
字节[]缓冲区=新字节[1024];
int no_of_字节=0;
而((无字节数=fis.read(缓冲区))!=-1){
写入(缓冲区,0,没有字节);
}
}捕获(例外e){
System.err.println(e.getLocalizedMessage());
}
}
}
这是服务器的代码:

import java.io.*;
导入java.net。*;
公共类服务器{
公共静态void main(字符串参数[]){
试一试{
ServerSocket ss=newserversocket(Integer.parseInt(args[0]);
套接字s=ss.accept();
System.out.println(“连接到”+s.getRemoteSocketAddress());
DataInputStream din=新的DataInputStream(s.getInputStream());
DataOutputStream dout=新的DataOutputStream(s.getOutputStream());
File new_File=新文件(“/home/Puspam/Videos/received.png”);
new_file.createNewFile();
BufferedWriter bw=新的BufferedWriter(新的文件写入程序(新的_文件));
INTA;
而((a=din.read())!=-1){
写入((字符)a);
}
din.close();
bw.flush();
}捕获(例外e){
System.err.println(e.getLocalizedMessage());
}
}
}
在用实验用的图像文件运行这两个程序之后,我发现文件传输不正确。当我试图打开收到的文件时,电脑中的图像查看器软件显示错误,表明它不是有效的图像文件。此外,我可以看到收到的文件比原始文件大一点。

我在这里犯了什么错误

我以前也有过类似的经历。尝试在两端使用相同类型的输入/输出流。例如,BufferedReader到BufferedWriter等。您将FileInputStream与BufferedWriter结合使用。此外,您可能需要在for循环的每次迭代中刷新BufferedWriter。

您所做的错误是使用
Writer
。在获得正确的输入和输出流之后,可以在两端使用完全相同的代码。使用您在此处发布的第一段代码,如果您愿意,可以使用
文件输出流
,并在其周围使用
缓冲输出流
。注1。您不需要调用
createNewFile()
。2.使用更大的缓冲区。3.您需要关闭输出,而不仅仅是刷新它。NB 4。这里不需要
DataInput/OutputStreams
。我还没有完全找到您。我需要读取客户机代码中的文件,因此如何使用
FileOutputStream
?我使用
编写器来引用服务器代码。除了实际的流之外,它没有理由与客户机代码有任何不同。1。他正在发送二进制数据<因此,代码>读卡器
写卡器
是完全不可能的。2.在循环中刷新除了失去缓冲的所有好处之外,什么也做不到。