TCP实现文件上传
Tcp客户端
步骤
- 得知服务端地址,端口,创建socket连接
- 创建输出流
- 创建文件输入流来读取文件
- 通过输出流将文件写出
- 通知服务端已经传输完毕
- 接收服务端传回的接收完毕信息
- 关闭流
客户端代码:
package com.example.code.netWork.tcpfile;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
//Tcp客户端
public class TcpUploadFileClient {
public static void main(String[] args) throws Exception {
//1.得知服务端地址端口
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 2020);
//2.创建输出流
OutputStream outputStream = socket.getOutputStream();
//3.读取文件
FileInputStream fStream =
new FileInputStream(new File("src\\main\\java\\com\\example\\code\\netWork\\tcpfile\\123456.jpeg"));
//4.将文件写出
byte[] buffer = new byte[2048];
int len;
while ((len = fStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
//5.通知服务端我已经传完了
socket.shutdownOutput();
//6.确定服务端已经接收完毕,断开连接
InputStream inputStream = socket.getInputStream();
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
byte[] buffer2 = new byte[2048];
int len2;
while ((len2 = inputStream.read(buffer2)) != -1) {
byteOutputStream.write(buffer2, 0, len2);
}
System.out.println(byteOutputStream.toString());
//7.关闭流
byteOutputStream.close();
inputStream.close();
fStream.close();
outputStream.close();
socket.close();
}
}
Tcp客户端
步骤
- 设置服务端端口号
- 监听客户端连接
- 输入流
- 通过文件输出流保存文件
- 接收完毕通知客户端
- 关闭流
客户端代码:
package com.example.code.netWork.tcpfile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//Tcp服务端
public class TcpUploadFileServer {
public static void main(String[] args) throws Exception {
//1.设置服务端端口
ServerSocket socket = new ServerSocket(2020);
//2.对客户机进行监听
Socket socket2 = socket.accept();
//3.获取输入流
InputStream in = socket2.getInputStream();
//4.文件输出
FileOutputStream out = new FileOutputStream(new File("src\\main\\java\\com\\example\\code\\netWork\\tcpfile\\recevier.jpeg"));
byte[] buffer = new byte[2048];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
//5.若接收完毕,通知客户端接收完毕
OutputStream outputStream = socket2.getOutputStream();
outputStream.write("我接收完毕!".getBytes());
//6.关闭流
outputStream.close();
out.close();
in.close();
socket2.close();
socket.close();
}
}
本文由
没有翅膀却想飞上天空
原创发布于
阳光沙滩
,未经作者授权,禁止转载