图片上传功能模拟

注意:先启动服务器端,再启动客户端

 

 

客户端:


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class UploadImgClient {

	public static void main(String[] args) throws IOException {
		System.out.println("客户端上传数据!");
		//连接服务器利用Socket创建输出流
		Socket s=new Socket("192.168.51.179",10001);
		OutputStream os = s.getOutputStream();
		BufferedOutputStream bos=new BufferedOutputStream(os);
		
		//创建输入流读取文件
		FileInputStream fis=new FileInputStream(new File("C:\\Users\\刘备\\Desktop\\a.png"));
		BufferedInputStream bis=new BufferedInputStream(fis);
		
		//一边读取一边写到服务器
		byte [] by=new byte[1024];
		int len=0;
		while((len=bis.read(by))!=-1) {
			bos.write(by,0,len);
		}

		//关闭Socket输出流
		bos.flush();  //不刷新可能上传到服务器的图片会变小
		//该方法可以代替关流,并且与该流相关的os/dos都不用关。s.shutdownInput();没这功能
		s.shutdownOutput();
		
		//创建Socket输入流接收服务器反馈
		InputStream is = s.getInputStream();
		DataInputStream dis=new DataInputStream(is);
		System.out.println(dis.readUTF());
		
		//关流
		is.close();
		dis.close();
		bis.close();
		fis.close();
		s.close();
		
		
	}

}

服务器端:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class UploadImgServer {

	public static void main(String[] args) throws IOException {
		System.out.println("服务器接收数据!");
		//连接客户端利用Socket创建输入流
		ServerSocket ss=new ServerSocket(10001);
		Socket s = ss.accept();
		InputStream is = s.getInputStream();
		BufferedInputStream dis=new BufferedInputStream(is);
		
		//创建输出流读取Scoket输入
		FileOutputStream fos=new FileOutputStream(new File("C:\\Users\\刘备\\Desktop\\b.png"));
		BufferedOutputStream bos=new BufferedOutputStream(fos);
		
		//Socket输入流一边读取,输出流一边写入文件
		byte [] by=new byte[1024];
		int len=0;
		while((len=dis.read(by))!=-1) {
			bos.write(by,0,len);
		}
		
			
		//关闭Socket输入流
		s.shutdownInput();
		
		//创建Socket输出流给予客户反馈
		OutputStream os = s.getOutputStream();
		DataOutputStream dos=new DataOutputStream(os);
		
		dos.writeUTF("服务器接收完毕!");
		
		//关流
		//该方法可以代替关流,并且与该流相关的os/dos都不用关。s.shutdownInput();没这功能
		s.shutdownOutput();
		bos.close();
		fos.close();
		s.close();
		ss.close();
	
		
	}

}

猜你喜欢

转载自blog.csdn.net/pengzonglu7292/article/details/85069162
今日推荐