TCP实现图片上传
本文使用java语法实现了图片上传的功能,未涉及数据库存储。如有需要将输出流存入数据库即可。
客户端
实现步骤
- 使用Socket与服务器建立连接
- 创建一个输出流,用于传输图片
- 读取需要传输的图片
- 将图片以字节的形式写入输出流
- 告知服务器发送完成
- 确认服务器是否接受
- 释放资源
实现代码
public class Client {
public static void main(String[] args) throws Exception {
// 建立一个socket连接
InetAddress serverIp = InetAddress.getByName("127.0.0.1");
int port = 2001;
Socket socket = new Socket(serverIp,port);
// 创建一个输出流
OutputStream os = socket.getOutputStream();
// 读取文件
FileInputStream fis = new FileInputStream("warmClient.jpg");
// 写文件
byte[] buffer = new byte[1024];
int len = 0 ;
while((len = fis.read(buffer)) != -1) {
os.write(buffer,0,len);
}
// 告知发送完毕
socket.shutdownOutput();
// 确实服务器接受完毕
InputStream is = socket.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer2 = new byte[1024];
int len2 = 0;
while((len2 = is.read(buffer2)) != -1) {
byteArrayOutputStream.write(buffer2,0,len2);
}
System.out.println(byteArrayOutputStream.toString());
// 释放资源
byteArrayOutputStream.close();
is.close();
fis.close();
os.close();
socket.close();
}
}
服务端
实现步骤
- 创建一个serverSocket服务
- 监听客户端是否连接
- 创建一个输入流,用于存储接收到的信息
- 文件输出
- 通知客户端接受完成
- 释放资源
实现代码
public class Serve {
public static void main(String[] args) throws Exception {
// 创建服务
ServerSocket serverSocket = new ServerSocket(2001);
// 监听客户端连接
Socket socket = serverSocket.accept();
// 获取输入流
InputStream is = socket.getInputStream();
// 文件输出
FileOutputStream fos = new FileOutputStream(new File("warmServer.jpg"));
byte[] buffer = new byte[1024];
int len = 0;
while((len = is.read(buffer))!= -1) {
fos.write(buffer,0,len);
}
// 通知客户端接受完成
OutputStream os = socket.getOutputStream();
os.write("接受完毕".getBytes());
// 释放资源
os.close();
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}