• 学习问题记录(7)--网络编程


    基于Socket实现多客户/服务器通信程序

    客户端:

     1 package test;
     2 
     3 import java.io.IOException;
     4 import java.net.ServerSocket;
     5 public class MultiTalkServer{
     6     static int clientnum=0; //静态成员变量,记录当前客户的个数
     7     public static void main(String args[]) throws IOException {
     8         ServerSocket serverSocket=null;
     9         boolean listening=true;
    10         try{
    11             //创建一个ServerSocket在端口4700监听客户请求
    12             serverSocket=new ServerSocket(4700);             
    13         }catch(IOException e) {
    14             System.out.println("Could not listen on port:4700.");
    15             //出错,打印出错信息
    16             System.exit(-1); //退出
    17         }
    18         while(listening){ //循环监听
    19           //监听到客户请求,根据得到的Socket对象和客户计数创建服务线程,并启动之
    20           new ServerThread(serverSocket.accept(),clientnum).start();
    21           clientnum++; //增加客户计数
    22         }
    23         serverSocket.close(); //关闭ServerSocket
    24     }
    25 }

     客户端线程

     1 package test;
     2 
     3 import java.io.*;
     4 import java.net.*;
     5 public class ServerThread extends Thread{
     6     Socket socket=null; //保存与本线程相关的Socket对象
     7     int clientnum; //保存本进程的客户计数
     8     public ServerThread(Socket socket,int num) { //构造函数
     9          this.socket=socket; //初始化socket变量
    10          clientnum=num+1; //初始化clientnum变量
    11     }
    12     public void run() { //线程主体
    13         try{
    14             String line;
    15             //由Socket对象得到输入流,并构造相应的BufferedReader对象
    16             BufferedReader is=new BufferedReader(new 
    17             InputStreamReader(socket.getInputStream()));
    18             //由Socket对象得到输出流,并构造PrintWriter对象
    19             PrintWriter os=new PrintWriter(socket.getOutputStream());
    20             //由系统标准输入设备构造BufferedReader对象
    21             BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
    22             //在标准输出上打印从客户端读入的字符串
    23             System.out.println("Client:"+ clientnum +is.readLine());
    24             //从标准输入读入一字符串
    25             line=sin.readLine();
    26             while(!line.equals("bye")){//如果该字符串为 "bye",则停止循环
    27                os.println(line);//向客户端输出该字符串
    28                os.flush();//刷新输出流,使Client马上收到该字符串
    29                //在系统标准输出上打印该字符串
    30                System.out.println("Server:"+line);
    31                //从Client读入一字符串,并打印到标准输出上
    32                System.out.println("Client:"+ clientnum +is.readLine());
    33                line=sin.readLine();//从系统标准输入读入一字符串
    34             }//继续循环
    35             os.close(); //关闭Socket输出流
    36             is.close(); //关闭Socket输入流
    37             socket.close(); //关闭Socket            
    38         }catch(Exception e){
    39             System.out.println("Error:"+e);//出错,打印出错信息
    40         }
    41     }
    42 }

    服务器端

     1 package test;
     2 
     3 import java.io.*;
     4 import java.net.*;
     5 public class TalkClient {
     6     public static void main(String args[]) {
     7         try{
     8             //向本机的4700端口发出客户请求
     9             Socket socket=new Socket("127.0.0.1",4700);
    10             //由系统标准输入设备构造BufferedReader对象
    11             BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
    12             //由Socket对象得到输出流,并构造PrintWriter对象
    13             PrintWriter os=new PrintWriter(socket.getOutputStream());
    14             //由Socket对象得到输入流,并构造相应的BufferedReader对象
    15             BufferedReader is=new BufferedReader(new 
    16                 InputStreamReader(socket.getInputStream()));
    17             String readline;
    18             readline=sin.readLine(); //从系统标准输入读入一字符串
    19             while(!readline.equals("bye")){//若从标准输入读入的字符串为 "bye"则停止循环
    20                 //将从系统标准输入读入的字符串输出到Server
    21                 os.println(readline);
    22                 os.flush();//刷新输出流,使Server马上收到该字符串
    23                 //在系统标准输出上打印读入的字符串
    24                 System.out.println("Client:"+readline);
    25                 //从Server读入一字符串,并打印到标准输出上
    26                 System.out.println("Server:"+is.readLine());                
    27                 readline=sin.readLine(); //从系统标准输入读入一字符串
    28             } //继续循环
    29             os.close(); //关闭Socket输出流
    30             is.close(); //关闭Socket输入流
    31             socket.close(); //关闭Socket
    32         }catch(Exception e) {
    33             System.out.println("Error"+e); //出错,则打印出错信息
    34         }
    35     }
    36 }
  • 相关阅读:
    nslookup查询结果详解
    【Web页面测试】测试点和测试用例
    【CloverETL培训】题目
    VirtualBox虚拟机网络设置(四种方式)
    Web系统测试Web安全性测试
    sqlserver字段类型详解
    详解SVN 的使用
    Javascript闭包——懂不懂由你,反正我是懂了
    Javascript的console.log()用法
    [ JS 进阶 ] test, exec, match, replace
  • 原文地址:https://www.cnblogs.com/axchml/p/14001950.html
Copyright © 2020-2023  润新知