分析:
客户端:要求你从c盘下获取一张图片
服务器:收到客户端的获取图片,并保存到一个文件夹中。
数据源:C盘的图片
数据目的:服务器
/*
* 实现TCP图片上传客户端
* 1、Socket连接服务器,连不上啥也不说了
* 2、通过Socket获取字节输出流,写图片
* 3、使用自己的流对象读取图片数据源
* 4、读取图片将图片写到服务器,采取字节缓冲流提高效率
* 5、使用Socket获得服务器上的反馈
* 6、关闭资源
*
* */
public class PicClient {
public static void main(String[] args) throws IOException, IOException {
Socket socket=new Socket("127.0.0.1",8000);
OutputStream outputStream=socket.getOutputStream();
FileInputStream fileInputStream=new FileInputStream("C:\\word\\1.jpg");
int len=0;
byte[]data=new byte[1024];
while ((len=fileInputStream.read(data))!=-1) {
outputStream.write(data,0,len);
}
//给服务器写一个终止序列
socket.shutdownOutput();
InputStream inputStream=socket.getInputStream();
len=inputStream.read(data);
System.out.println(new String(data,0,len));
fileInputStream.close();
socket.close();
}
}
=========================================================================
/*
*TCP服务器程序
*1、使用ServerSocket套接字对象,监听端口8000
*2、accept()接受客户端的链接对象
*3、客户端连接对象获取字节输入流,读取图片
*4、创建FIle对象,绑定文件夹,如果不存在文件夹就新建文件夹
*5、读取图片,将上传成功写回客户端
*关闭资源
* */
public class PicServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8000);
Socket socket=serverSocket.accept();
InputStream inputStream=socket.getInputStream();
File upload=new File("E:\\upload");
if (!upload.exists()) {
upload.mkdirs();
}
//创建字节输出流,写入文件夹
//防止文件重名,域名+毫秒值
String filename="lee"+System.currentTimeMillis()+new Random().nextInt(9999)+".jpg";
FileOutputStream fileOutputStream=new FileOutputStream(upload+File.separator+filename);
//读写字节数组
byte[]data=new byte[1024];
int len;
while ((len=inputStream.read(data))!=-1) {
fileOutputStream.write(data,0,len);
}
//关闭资源
socket.getOutputStream().write("上传成功".getBytes());
fileOutputStream.close();
socket.close();
}
}
本文介绍了一种基于TCP协议的图片上传方案,详细展示了客户端如何从本地获取图片并发送至服务器,以及服务器接收图片并保存的过程。该方案利用Socket进行通信,客户端通过字节输出流将图片数据发送给服务器,服务器则通过字节输入流接收图片并存储至指定文件夹。
2738

被折叠的 条评论
为什么被折叠?



