zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    第一次讲课
    请允许我悄悄的爱你一次好吗 zz
    装.NET实在是一种折磨,
    第一次听课
    路,在何方?
    UNION和UNION ALL 的区别
    利用jquery操作select下拉列表框
    理解 collate Chinese_PRC_CI_AS
    sql 中 case when 实例
    sql 中 case when 实例(2)
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4872583.html
Copyright © 2011-2022 走看看