JavaSE-21.3.6【TCP通信程序练习5】

package day12.lesson3.p5;

import java.io.*;
import java.net.Socket;

/*
3.7 TCP通信程序练习5

    案例需求
        客户端:数据来自于文本文件,接收服务器反馈
        服务器:接收到的数据写入文本文件,给出反馈
    案例分析
        创建客户端对象,创建输入流对象指向文件,每读入一行数据就给服务器输出一行数据,输出结束后使用shutdownOutput()方法告知服务端传输结束
        创建服务器对象,创建输出流对象指向文件,每接受一行数据就使用输出流输出到文件中,传输结束后。使用输出流给客户端反馈信息
        客户端接受服务端的回馈信息
    相关方法
        void shutdownInput() 将此套接字的输入流放置在“流的末尾”
        void shutdownOutput() 禁止用此套接字的输出流
 */
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("MSI-YUBABY", 10000);

        BufferedReader br = new BufferedReader(new FileReader("stage2\\src\\day12\\lesson3\\p5\\src.txt"));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

        String line;
        while ((line=br.readLine()) != null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        /*//自定义结束标记
        bw.write("886");
        bw.newLine();
        bw.flush();*/
        //此方法存在的问题:万一所读取的源文本文件中存在“886”,则服务器端接收不到完整的文件内容,只能接收到文件中“886”之前的内容

        s.shutdownOutput(); //表示输出结束

        //接收反馈
        BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String data = brClient.readLine(); //
        System.out.println("服务器的反馈:" + data);

        br.close();
        s.close();
    }
}
 1 package day12.lesson3.p5;
 2 
 3 import java.io.*;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 
 7 public class ServerDemo {
 8     public static void main(String[] args) throws IOException {
 9         ServerSocket ss = new ServerSocket(10000); //创建服务器Socket对象
10 
11         Socket s = ss.accept(); //监听客户端连接,返回一个对应的Socket对象
12 
13         //接收数据
14         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
15         BufferedWriter bw = new BufferedWriter(new FileWriter("stage2\\src\\day12\\lesson3\\p5\\tar.txt"));
16 
17         String line;
18         while ((line=br.readLine()) != null){ //
19             /*if("886".equals(line)){
20                 break;
21             }*/
22             bw.write(line);
23             bw.newLine();
24             bw.flush();
25         }
26 
27         //给出反馈
28         BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
29         bwServer.write("文件上传成功");
30         bwServer.newLine();
31         bwServer.flush();
32 
33         bw.close();
34         ss.close();
35     }
36 }

src.txt

hello
world
java
886
do u love it?
i love it very much

tar.txt

hello
world
java
886
do u love it?
i love it very much

  

posted @ 2021-06-11 10:03  yub4by  阅读(40)  评论(0编辑  收藏  举报