Java网络编程:客户端上传文件到服务端

本文介绍了如何使用Java实现客户端与服务器之间的图片上传与接收,涉及ServerSocket、Socket通信、字节流操作和文件I/O。客户端发送图片到服务端,服务端保存并在接收到确认后回复客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户端上传一张图片到服务端,服务端将该图片保存到本机的D盘根目录下, 并回复客户机:图片已经收到

服务端:

/** 服务端
 *  
 * */
public class Server {
	public static void main(String[] args) throws IOException {
		// 1.创建服务器:注意端口不能冲突
		ServerSocket ss = new ServerSocket(6666);
		System.out.println("【服务端】");
		// 2.等待连接
		Socket sk = ss.accept();

		// 3.从连接管道中获取IO流,接收图片要使用字节流,
		// 字节输入流:读取图片
		InputStream is = sk.getInputStream();
		// 为了保存图片,需要自己新建一个文件输出流
		FileOutputStream fos = new FileOutputStream("d:\\abc.jpg");
		System.out.println("准备接收图片。。。。。");

		// 4.从字节流中读取图片字节,并保存到D盘
		byte[] b = new byte[1024];
		int len;
		while ((len = is.read(b)) != -1) {
			fos.write(b, 0, len);
		}
		System.out.println("图片已经保存至D盘");

		// 5.回复客户消息 
		// 可以使用带缓冲的字符输出流:为了回复客户消息用的,仅仅发送字符使用
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
		bw.write("客户你好,图片我已经收到");
		bw.newLine(); // 写出一个行的标记 或着在上面字符串中使用 \n,因为对方在读取一行的时候以此标记作为读取的结束
		bw.flush(); // 清空缓冲区:把所有缓冲区中的数据写出去

		// 6.释放资源
		fos.close(); // 关闭我们自己创建的文件输出流
		sk.close(); // 关闭连接
		ss.close(); // 关闭服务
	}
}

客户端:

/**
 * 客户端上传一张图片给服务器,并接收服务器的反馈
 */
public class Client {
	public static void main(String[] args) throws UnknownHostException, IOException {
		// 1.客户端
		System.out.println("【客户端】");
		Socket sk = new Socket("127.0.0.1", 6666);

		// 2.读取本地的图片,并发送出去,用哪些IO流
		// ① 文件输入流:读取本机D盘的那张图片
		FileInputStream fis = new FileInputStream("d:\\hdl.jpg");

		// ② 输出流:从连接中获取就可以
		OutputStream os = sk.getOutputStream();
		System.out.println("准备发送图片......");

		byte[] b = new byte[1024];
		int len;
		while ((len = fis.read(b)) != -1) {
			os.write(b, 0, len);
		}
		
		sk.shutdownOutput(); //注意:至关重要!写入结束的标记,否则服务端在接收字节的时候不知道对方的输出流什么时候结束,会一直等待读取
		
		System.out.println("图片发送完毕");

		// 3.接收服务端的反馈,使用 输入流
		BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
		System.out.println("服务器反馈:"+br.readLine());
		
		fis.close();
		sk.close();
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值