Java网络编程—文件传输
本文代码实现了文件传输功能:
- 客户端传输本地文件至服务端
- 服务端将客户端传输的文件保存在服务端本地
- 服务端接收完文件之后给客户端一个接收回复
需要注意的坑点是不管是对于服务端还是客户端来说,两者的输入和输出流一旦关闭,那么两个流以及socket也就无法继续使用了!因此最好的做法就是要关闭就一起关闭!
具体代码如下:
客户端代码
package NetworkProgramming;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class client {
public static void main(String[] args) throws IOException {
// connect
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
// upload file
OutputStream out = socket.getOutputStream();
String path = "/Users/pluto/Code/Java/src/NetworkProgramming/a.jpg";
FileInputStream fis = new FileInputStream(path);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) != -1) {
out.write(buffer, 0, len);
out.flush();
}
socket.shutdownOutput();
// close resource
fis.close();
// get response
BufferedReader bfr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = "";
while ((s = bfr.readLine()) != null) {
System.out.println(s);
}
// close resource
bfr.close();
out.close();
socket.close();
}
}
服务端代码
package NetworkProgramming;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) throws IOException {
// connect
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept();
System.out.println("get connect!");
// download file
InputStream in = socket.getInputStream();
String path = "/Users/pluto/Code/Java/src/NetworkProgramming/b.jpg";
File file = new File(path);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
// close resource
fos.close();
// response
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bfw.write("server get image!");
bfw.newLine();
// close resource
bfw.close();
in.close();
socket.close();
serverSocket.close();
}
}

浙公网安备 33010602011771号