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

来源:互联网 发布:政府审查知乎 编辑:程序博客网 时间:2024/06/01 23:42
/* * 【练习】从客户端向服务端上传文本文件 */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 0
原创粉丝点击