socket简单编程01(客户端向服务器发送文件,服务器接收到后回复客户端)

本文介绍了一个简单的Socket编程实例,包括客户端向服务器发送文件及服务器接收文件后回复客户端的过程。客户端将本地文件转换为字节数组并通过Socket发送,服务器接收后保存文件,并通过Socket向客户端发送确认消息。

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

socket简单编程01(客户端向服务器发送文件,服务器接收到后回复客户端)

//工具类
package file.input.work;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamUtils {
	public static byte[] streamTobyteArray(InputStream inputStream) throws IOException
	{
		byte[] buff = new byte[1024];
		ByteArrayOutputStream boStream = new ByteArrayOutputStream();
		int len;
		while((len=inputStream.read(buff))!=-1)
		{
			boStream.write(buff, 0, len);
		}
		byte[] bs = boStream.toByteArray();
		boStream.close();
		return bs;
	}
	
	public static String streamToString(InputStream in) throws IOException
	{
		StringBuilder sBuilder = new StringBuilder();
		InputStreamReader iReader = new InputStreamReader(in);
		BufferedReader bReader = new BufferedReader(iReader);
		String line;
		while((line=bReader.readLine())!=null)
		{
			sBuilder.append(line+"\r\n");
		}
		
		return sBuilder.toString();
	}
	
}

//服务器端
package file.input.work;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTwo {
	public static void main(String[] args) throws IOException {
		System.out.println("服务器端准备就绪。。。。");
		ServerSocket serverSocket = new ServerSocket(8888);
		Socket socket = serverSocket.accept();
		System.out.println("服务器端连接成功");
		
		
		BufferedInputStream bInputStream = new BufferedInputStream(socket.getInputStream());
		
		byte[] bs = StreamUtils.streamTobyteArray(bInputStream);	
		String path = "C:\\Users\\美力姐姐\\Pictures\\q.jpg";
		File file = new File(path);
		BufferedOutputStream bOutputStream = new BufferedOutputStream(new FileOutputStream(file));
		bOutputStream.write(bs);
		bOutputStream.flush();
		System.out.println("图片上传完成");
		bOutputStream.close();
		
		//回复收到图片
//		OutputStream oStream = socket.getOutputStream();
//		System.out.println("开始回复客户端消息。。。");
//		oStream.write("上传完成".getBytes());
//		oStream.flush();
//		socket.shutdownInput();
//		System.out.println("结束");
		
		OutputStream oStream = socket.getOutputStream();
		OutputStreamWriter  oWriter = new OutputStreamWriter(oStream);
		BufferedWriter bWriter = new BufferedWriter(oWriter);
		bWriter.write("客户端你已经上传完成");
		bWriter.newLine();
		bWriter.close();
		
		oStream.close();
		bInputStream.close();
		socket.close();
		serverSocket.close();
	}
}

//客户端
package file.input.work;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientTow {
	public static void main(String[] args) throws IOException, IOException {
		Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
		
		byte[] buff = new byte[1024];
		String path = "C:\\Users\\Pictures\\hg.jpg";
		File file = new File(path);
		FileInputStream fileInputStream = new FileInputStream(file);
		BufferedInputStream bInputStream = new BufferedInputStream(fileInputStream);
		byte[] byteArray = StreamUtils.streamTobyteArray(bInputStream);
		
		InputStream iStream = socket.getInputStream();
		
		BufferedOutputStream bOutputStream = new BufferedOutputStream(socket.getOutputStream());
		bOutputStream.write(byteArray);
		bOutputStream.flush();
		System.out.println("上传完成");
		bInputStream.close();
		socket.shutdownInput();
		
		//原始方法接收消息
//		byte[] b = new byte[1024];
//		int len ;
//		System.out.println("开始接收消息");
//		while((len=iStream.read(b))!=-1)
//		{
//			System.out.println(new String(b, 0, len));
//		}
//		System.out.println("接收完成");
		
		String s = StreamUtils.streamToString(iStream);//自己写的工具类
		System.out.println(s);
		
		iStream.close();
		bOutputStream.close();
		socket.close();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值