Java基础知识强化之网络编程笔记12:TCP之TCP协议上传文本文件并给出反馈

1. 客户端

 1 package cn.itcast_12;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileReader;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.OutputStreamWriter;
 9 import java.net.Socket;
10 
11 /*
12  * 按照我们正常的思路加入反馈信息,结果却没反应。为什么呢?
13  * 读取文本文件是可以以null作为结束信息的,但是呢,通道内是不能这样结束信息的。
14  * 所以,服务器根本就不知道你结束了。而你还想服务器给你反馈。所以,就相互等待了15  * 
16  * 如何解决呢?
17  * A:在多写一条数据,告诉服务器,读取到这条数据说明我就结束,你也结束吧18  *         这样做可以解决问题,但是不好。
19  * B:Socket对象提供了一种解决方案
20  *         public void shutdownOutput()
21  */
22 
23 public class UploadClient {
24     public static void main(String[] args) throws IOException {
25         // 创建客户端Socket对象
26         Socket s = new Socket("192.168.12.92", 11111);
27 
28         // 封装文本文件
29         BufferedReader br = new BufferedReader(new FileReader(
30                 "InetAddressDemo.java"));
31         // 封装通道内流
32         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
33                 s.getOutputStream()));
34 
35         String line = null;
36         while ((line = br.readLine()) != null) { // 阻塞
37             bw.write(line);
38             bw.newLine();
39             bw.flush();
40         }
41         
42         //自定义一个结束标记
43 //        bw.write("over");
44 //        bw.newLine();
45 //        bw.flush();
46         
47         //Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了
48         s.shutdownOutput();
49 
50         // 接收反馈
51         BufferedReader brClient = new BufferedReader(new InputStreamReader(
52                 s.getInputStream()));
53         String client = brClient.readLine(); // 阻塞
54         System.out.println(client);
55 
56         // 释放资源
57         br.close();
58         s.close();
59     }
60 }

(2)服务端:

 1 package cn.itcast_12;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.OutputStreamWriter;
 9 import java.net.ServerSocket;
10 import java.net.Socket;
11 
12 public class UploadServer {
13     public static void main(String[] args) throws IOException {
14         // 创建服务器端的Socket对象
15         ServerSocket ss = new ServerSocket(11111);
16 
17         // 监听客户端连接
18         Socket s = ss.accept();// 阻塞
19 
20         // 封装通道内的流
21         BufferedReader br = new BufferedReader(new InputStreamReader(
22                 s.getInputStream()));
23         // 封装文本文件
24         BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
25 
26         String line = null;
27         while ((line = br.readLine()) != null) { // 阻塞
28         // if("over".equals(line)){
29         // break;
30         // }
31             bw.write(line);
32             bw.newLine();
33             bw.flush();
34         }
35 
36         // 给出反馈
37         BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(
38                 s.getOutputStream()));
39         bwServer.write("文件上传成功");
40         bwServer.newLine();
41         bwServer.flush();
42 
43         // 释放资源
44         bw.close();
45         s.close();
46     }
47 }
原文地址:https://www.cnblogs.com/hebao0514/p/4872583.html