使用TCP协议,分别编写服务端和客户端,要求客户端向服务端上传文件。(使用字符流完成)

package Test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

/**
 * 5.使用TCP协议,分别编写服务端和客户端,要求客户端向服务端上传文件。
 * @author Administrator
 */
public class Test05 {
	//客户端
	public static void main(String[] args) throws IOException {
		//创建客户端端点对象,并确定服务端的ip及端口号;
		Socket s = new Socket("localhost",8970);
		//获取通道输出流对象,给服务端发送数据。
		OutputStream ost = s.getOutputStream();
		//将字节输出流转换成字符输出流
		OutputStreamWriter ops = new OutputStreamWriter(ost);
		//利用字符缓冲流提高效率
		BufferedWriter bfw = new BufferedWriter(ops);
		
		//创建字符输入流
		FileReader fr = new FileReader("d:\\1.txt");
		
		//读取本地磁盘的文件
		char [] by = new char [1024];
		int len = 0 ;
		while((len = fr.read(by)) != -1) {
			bfw.write(by, 0, len);
			bfw.newLine();
			bfw.flush();
		}
		fr.close();
		//告诉服务端数据已发送完成
		System.out.println("数据已发送完毕");
		s.shutdownOutput();
		
		//获取服务端反馈的数据
		BufferedReader bfd = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line = bfd.readLine();
		System.out.println(line);
		
		//关闭客户端
		s.close();
	}
}

package Test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 使用TCP协议,分别编写服务端和客户端,要求客户端向服务端上传文件。
 * @author Administrator
 */
public class Test06 {
	/**
	 * 服务端
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//创建服务端端点对象,并自定义端口号。
		ServerSocket ss = new ServerSocket(8970);
		
			//接收客户端
			Socket s = ss.accept();
			//获取ip
			String ip = s.getInetAddress().getHostAddress();
			
			//获取输入流,读取客户端给服务端发送的数据
			BufferedReader bfr = new BufferedReader(new InputStreamReader(s.getInputStream()));
			//创建输出流对象,将数据写入到本地磁盘
			BufferedWriter bfd = new BufferedWriter(new FileWriter("d:\\"+ip+".txt"));
			
			String line = null;
			while((line = bfr.readLine()) != null) {
				bfd.write(line);
				bfd.newLine();
				bfd.flush();
			}
			System.out.println("文件保存成功");
			bfd.close();
			
			//给客户端发送数据
			BufferedWriter bfd2 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			bfd2.write("文件上传成功");
			bfd2.flush();
			s.close();
		}
	}

在这里插入图片描述
服务端还可以添加线程,实现多个客户端同时向服务端传递数据

猜你喜欢

转载自blog.csdn.net/weixin_43117449/article/details/82990617