zoukankan      html  css  js  c++  java
  • java学习之网络编程之echo程序

    服务端的实现

     1 package com.gh.echo;
     2 import java.io.*;
     3 import java.net.*;
     4 /**
     5  * echo服务器程序
     6  * 实现 不断接收字符串 ,然后返回一个echo+字符串
     7  * 服务程序写成多线程
     8  * @author ganhang
     9  * 
    10  */
    11 public class EchoServerDemo {
    12     public static void main(String[] args) {
    13         try {
    14             ServerSocket ss = new ServerSocket(8000);
    15             System.out.println("服务器已启动。");
    16             int i=1;
    17             while (true) {
    18                 System.out.println("服务器正在等待连接...");
    19                 Socket s = ss.accept();
    20                 new Thread(new UserThread(s),"用户"+i++).start();//来一个用户启动一个线程
    21             }
    22         } catch (IOException e) {
    23             e.printStackTrace();
    24         }
    25     }
    26 }
    27 /**
    28  * 用户线程
    29  * @author ganhang
    30  */
    31 class UserThread implements Runnable{
    32     private Socket s;
    33     public UserThread(Socket s) {
    34         this.s=s;
    35     }
    36     @Override
    37     public void run() {
    38         System.out.println(Thread.currentThread().getName()+"-已连接");
    39         try{
    40         BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    41         BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    42         while(true){//循环读入知道读入bye
    43             String info=br.readLine();//因为是读一行所以客服端发送过来的字符串必须有"
    "换行符
    44             System.out.println(info);
    45             if("".equals(info)||"bye".equals(info)){
    46                 break;
    47             }else{
    48                 bw.write("echo:你好"+Thread.currentThread().getName()+"
    ");//客服端用的读一行所以这边末尾加换行符
    49                 bw.flush();//缓存流必须刷新
    50             }
    51         }
    52         br.close();
    53         bw.close();
    54         }catch(IOException e){
    55             e.printStackTrace();
    56         }
    57     }
    58     
    59 }

    客户端的实现

     1 package com.gh.echo;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.IOException;
     6 import java.io.InputStreamReader;
     7 import java.io.OutputStreamWriter;
     8 import java.net.Socket;
     9 import java.util.Scanner;
    10 /**
    11  * echo客户端
    12  * 实现从控制台写字符串发送给服务器,接收服务器发回来的字符串
    13  * @author ganhang
    14  *
    15  */
    16 public class EchoClientDemo {
    17     
    18     public static void main(String[] args) {
    19         try {
    20             Socket sk=new Socket("",8000);
    21             System.out.println("与服务器连接成功。");
    22             Scanner sc=new Scanner(System.in);
    23             BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
    24             BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream()));
    25             while(true){
    26                 System.out.println("请输入文字:");
    27                 String info=sc.next();
    28                 if("bye".equals(info)){
    29                     break;
    30                 }else{
    31                     bw.write(info+"
    ");
    32                     bw.flush();
    33                     System.out.println(br.readLine());
    34                 }
    35             }
    36             bw.close();
    37             br.close();
    38         } catch (IOException e) {
    39             e.printStackTrace();
    40         }
    41         
    42     }
    43 }
  • 相关阅读:
    【爬虫】新闻统计
    python pip 出错 "Can't connect to HTTPS URL because the SSL module is not available.
    【sql server复制】sql server复制【最佳实践】
    mybase个人数据库笔记工具下载
    sqlserver脱机时ldf文件丢失重建
    sqlserver CTE定位点类型和递归部分的类型不匹配
    mysql物理存储(页区段)
    sql server update与delete引发的死锁
    Linux学习笔记(19)linux定时任务(crontab)
    mysql工具生态
  • 原文地址:https://www.cnblogs.com/ganhang-acm/p/5154365.html
Copyright © 2011-2022 走看看