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

1
2
3
4
5
6
hello
world
java
886
do u love it?
i love it very much

tar.txt

1
2
3
4
5
6
hello
world
java
886
do u love it?
i love it very much

  

posted @   yub4by  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示