server端流程:
- 创建ServerSocket对象,指名端口号。
- 调用accept( )方法,获取客户端socket。
- 创建输入流,用于读取网络数据。
- 创建文件输出流, 将数据输出为文件。
- 创建输出流,发送反馈信息。
public void server() throws IOException {
try (ServerSocket server = new ServerSocket(9090);
Socket socket = server.accept();
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
FileOutputStream fout = new FileOutputStream(new File("pic_tranced.jpg"))) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
fout.write(buffer, 0, len);
}
out.write("文件传输完成.".getBytes());
}
}
client段流程:
- 创建Socket对象,指名服务端IP地址和端口号。
- 创建输出流,用于发送网络数据。
- 创建文件输入流,读取文件数据。
- 调用shutdownOutput( )方法,取消read( )阻塞。
- 创建输入流,接收服务端的反馈信息。
public void client() throws IOException {
try (Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
FileInputStream fin = new FileInputStream(new File("pic.jpg"))) {
byte[] buffer = new byte[1024];
int len;
while ((len = fin.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
socket.shutdownOutput();
byte[] serverBuffer = new byte[1024];
int length;
while ((length = in.read(serverBuffer)) != -1) {
bout.write(serverBuffer, 0, length);
}
System.out.println(bout.toString());
}
}