zoukankan      html  css  js  c++  java
  • 网络编程-TCP程序实例(文本大写转化器)

      1 package netTest;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.BufferedWriter;
      5 import java.io.IOException;
      6 import java.io.InputStream;
      7 import java.io.InputStreamReader;
      8 import java.io.OutputStream;
      9 import java.io.OutputStreamWriter;
     10 import java.net.InetAddress;
     11 import java.net.Socket;
     12 import java.net.UnknownHostException;
     13 
     14 /*
     15  * 需求:建立一个文本转换服务器
     16  * 客户端给服务器发送文本,服务器会将文本转换成大写再返回给客户端
     17  * 而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束。
     18  *
     19  *步骤: 1.建立服务
     20  *     2.获取键盘录入
     21  *    3.将数据发送给服务端
     22  *    4.获取服务器端返回的大写数据
     23  *    5.结束,关闭资源
     24  *    都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲
     25  */
     26 public class TcpClient {
     27     public static void main(String[] args) throws Exception {
     28         Socket s = new Socket(InetAddress.getLocalHost(),7605);
     29         //OutputStream out = s.getOutputStream();
     30         // 定义一个socket 读取流,读取服务器端返回的大写信息
     31         BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
     32         
     33         // 定义读取键盘数据的流对象
     34         BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
     35         
     36         //定义目的,将数据写入到socket输出流,发送给服务器。
     37         BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     38         String line = null;
     39         while((line = bufr.readLine())!=null){
     40             if("over".equals(line)){
     41                 break;
     42             }
     43             bufOut.write(line);
     44             bufOut.newLine();
     45             // 数据在缓冲区中没有出去
     46             bufOut.flush();
     47             //刷新后数据就出去了。
     48             String str = bufIn.readLine();
     49             System.out.println("server:"+str);
     50         }
     51         /*byte[] buf = new byte[1024];
     52         while(true){
     53             int len = bufr.read(buf);
     54             System.out.println(new String(buf,0,len));
     55         }*/
     56         
     57     }
     58 }
     59 /*
     60  * 该例子出现的问题:
     61  * 现象:客户端和服务器端都在莫名的等待。
     62  * 为什么呢? 因为客户端和服务器端都有阻塞式的方法,这些方法没有读到结束标记,那就一直等待下去,从而导致两端
     63  * 都在等待。在 read里面。
     64  */
     65 
     66 
     67 
     68 package netTest;
     69 
     70 import java.io.BufferedReader;
     71 import java.io.BufferedWriter;
     72 import java.io.IOException;
     73 import java.io.InputStream;
     74 import java.io.InputStreamReader;
     75 import java.io.OutputStream;
     76 import java.io.OutputStreamWriter;
     77 import java.net.ServerSocket;
     78 import java.net.Socket;
     79 
     80 /*
     81  * 
     82  * 服务端:源 socket 读取流
     83  *     :目的:socket 输出流
     84  *     文本装饰。
     85  */
     86 public class TcpServer {
     87     public static void main(String[] args) throws IOException {
     88         ServerSocket ss = new ServerSocket(7605);
     89         while(true){
     90             Socket s = ss.accept();
     91             String ip = s.getInetAddress().getHostAddress();
     92             System.out.println(ip);
     93             // 定义一个socket 读取流,读取服务器端返回的大写信息
     94             BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
     95             //定义目的,将数据写入到socket输出流,发送给服务器。
     96             BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     97             String line = null;
     98             // 在读一行时实际上读到是回车前的数据,这是没有一行
     99             while((line = bufIn.readLine())!=null){
    100                 System.out.println(line);
    101                 if(line.equals("over")){
    102                     break;
    103                 }
    104                 bufOut.write(line.toUpperCase());
    105                 // 这是结束标记这个地方很重要  。。。。。。。。。
    106                 bufOut.newLine();
    107                 bufOut.flush();
    108             }
    109             s.close();
    110             ss.close();
    111         }
    112         
    113     }
    114 }
  • 相关阅读:
    MT4编程初级手册
    导出oracle序列
    Win10下用Anaconda安装TensorFlow
    06-python opencv 使用摄像头捕获视频并显示
    python @修饰符的几种用法
    Ubuntu 16.04 安装 PyCharm
    Python判断变量的数据类型的两种方法
    上海地图
    kindle看扫描版pdf的解决办法
    查看已安装tensorflow版本
  • 原文地址:https://www.cnblogs.com/yangyongqian/p/5143417.html
Copyright © 2011-2022 走看看