TCP协议实现文件上传
实现图片上传的方法和实现通信的方法类似,都是通过IO流来实现的
package Inetcode;
//客户端代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class ClientDemo01 {
public static void main(String[] args)throws IOException {
//第一步:先拿到需要上传的图片
FileInputStream fis = new FileInputStream("C:\\Users\\one\\Desktop\\图片集\\1.jpg");
//第二步:实例化socket类,连接服务器
Socket socket = new Socket("127.0.0.1",9010);
//第三步:通过socket提供的getoutputstream方法与服务器建立io连接
OutputStream os = socket.getOutputStream();
//第四步:把图片通过io连接使用write方法上传
os.write("准备上传".getBytes());
byte[] buffer = new byte[1024];
int len=0;
while ((len=fis.read(buffer))!=-1){
os.write(buffer,0,len);
}
//第五步:上传完成关闭Io连接,告诉服务器自己已经上传完毕
socket.shutdownOutput();
//第六步:接收服务器的返回信息
InputStream is = socket.getInputStream();
len=0;
while((len=is.read(buffer))!=-1){
System.out.println(new String(buffer,0,len));
}
//第七步:释放资源(关闭Io)
socket.close();
fis.close();
}
}
package Inetcode;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo01 {
public static void main(String[] args) throws IOException {
//第一步:向系统要一个用于通讯的端口号
ServerSocket serverSocket = new ServerSocket(9010);
//第二步:侦听客户端的连接消息
Socket socket = serverSocket.accept();
//第三步:运用io流获取客户端发送的图片
InputStream is = socket.getInputStream();
//第三步半:侦听客户端发来的消息
int len1=is.read(buffer1);
System.out.println(new String(buffer1,0,len1));
//第四步:设置存放路径,先用File类创建一个图片存放路径
File file = new File("F:\\图片夹");
if(!file.exists()) {
file.mkdirs();
}
//第五步:图片接收完成,使用字节输出流保存到指定位置
FileOutputStream fos = new FileOutputStream("F:\\图片夹\\1.jpg");
byte[]buffer = new byte[1024];
int len = 0;
while ((len=is.read(buffer))!=-1){
fos.write(buffer,0,len);
}
//第六步:给客户端发送返回消息,告诉它执行结果
socket.getOutputStream().write("上传成功".getBytes());
//第七步:释放资源关闭流
is.close();
socket.close();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!