26-网络编程-16-网络编程(TCP协议-练习-上传文本文件)

/*
 * 【练习】从客户端向服务端上传文本文件
 */

package UploadText;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class UploadClient {

	public static void main(String[] args) throws UnknownHostException, IOException {

		//1.建立客户端Socket对象
		Socket s = new Socket("10.196.19.56",10006);
		
		//2.建立读取流,用于读取待上传的文本文件内容
		BufferedReader bufr = new BufferedReader(new FileReader("client.txt"));
		
		//3.建立输出流,利用Socket特有方法获取输出流,将文件中数据输出到服务端
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		
		String line = null;
		while((line=bufr.readLine())!=null){
			
			out.println(line);
/*
 * 【如果没有结束标记】
 * 这里客户端发送一行数据给服务端(下接UploadServer中while循环)
 * 
 * 直到客户端数据全部发送完毕(下接UploadServer中while循环)
 */
			
		}
		
		/*
		 * 【特别注意】到这里位置客户端数据发送完毕,告诉服务端,即定义结束标记,用Socket类的特有方法:
		 * 			public void shutdownOutput()throws IOException
		 * 用于定义结束标记告诉服务端这边客户端结束
		 */
		s.shutdownOutput();
		
		//4.获取服务端反馈信息,即提示上传成功
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		String str = bufIn.readLine();//不用循环读了,一个提示信息而已,读一行即可
		
		System.out.println(str);
		
		//5.关闭资源
		bufr.close();
		s.close();
		
	}

}

=========================分割线=============================

package UploadText;

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

public class UploadServer {

	public static void main(String[] args) throws IOException {

		//1.建立服务端ServerSocket对象
		ServerSocket ss = new ServerSocket(10006);
		
		//2.通过ServerSocket类特有方法accept()获取客户端的Socket对象
		Socket s = ss.accept();
		System.out.println(s.getInetAddress().getHostAddress()+"connected......");
		
		//3.读取客户端发来的数据
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
//由于客户端发来的是用字节流读取的文本数据,那么这里用转换流InputStreamReader将字节数据转为字符数据
		
		//4.将上一步读取到的数据写到服务端文本文件中
		BufferedWriter bufw = new BufferedWriter(new FileWriter("server.txt"));
		
		String line = null;
		
		while((line=bufIn.readLine())!=null){//先读取客户端的数据
			
			bufw.write(line);//再写到服务端文件中
			bufw.newLine();//每写一行数据,换行一次
/*
 * 【如果没有结束标记】
 * (上接UploadClient中while循环)这里接收一行数据
 * 
 * (上接UploadClient中while循环)这里服务端还在等客户端数据,不知道客户端已经发完,所以readLine()阻塞,程序卡住不动
 */
			bufw.flush();
//由于接收到了客户端shutdownOutput()发来的结束标记,这里while循环结束			
		}
		
		//5.上传完毕后,将“上传完成”信息反馈给客户端
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		out.println("上传成功");
		
		//6.关闭资源
		bufw.close();
		s.close();
		ss.close();
		
		
		
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值