聊天器第二版--java

运行课本例15.4的支持多客户的TCP socket套接字C/S程序。

客户端的代码同上(聊天器第一版),服务器端采用多线程的方法,服务器不断监听客户连接请求,一旦收到新的客户请求,创建新的线程专门处理客户请求。

服务器端的主线程:

import java.io.*;
import java.net.*;
public class MultiTalkServer{
    static int clientnum=0; //静态成员变量,记录当前客户的个数
    public static void main(String args[]) throws IOException {
      ServerSocket serverSocket=null;
      boolean listening=true;
      try{
         //创建一个ServerSocket在端口4700监听客户请求
         serverSocket=new ServerSocket(4700); 
      }catch(IOException e) {
         System.out.println("Could not listen on port:4700.");
         System.exit(-1); //退出
      }
      while(listening){ //循环监听
      //监听到客户请求,根据得到的Socket对象和客户计数创建服务线程,并启动之
        new ServerThread(serverSocket.accept(),clientnum).start();
        clientnum++; //增加客户计数
      }
      serverSocket.close(); //关闭ServerSocket
  }
}

处理客户请求线程:

import java.io.*;
import java.net.*;
public class ServerThread extends Thread{
    Socket socket=null; //保存与本线程相关的Socket对象
    int clientnum; //保存本线程的客户计数
    public ServerThread(Socket socket,int num) { //构造函数
        this.socket=socket; //初始化socket变量
        clientnum=num+1; //初始化clientnum变量
    }
public void run() { //线程主体
    try{
       String line;
       BufferedReader is=new BufferedReader(new 
                 InputStreamReader(socket.getInputStream()));
       PrintWriter os=new PrintWriter(socket.getOutputStream());
       BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
       System.out.println("Client:"+ clientnum +is.readLine());
       line=sin.readLine();
       while(!line.equals("bye")){//如果该字符串为 "bye",则停止循环
         os.println(line);//向客户端输出该字符串
         os.flush();//刷新输出流,使Client马上收到该字符串
         System.out.println("Server:"+line);
         System.out.println("Client:"+ clientnum +is.readLine());
         line=sin.readLine();//从系统标准输入读入一字符串
       }//继续循环
       os.close(); //关闭Socket输出流
       is.close(); //关闭Socket输入流
       socket.close(); //关闭Socket
    }catch(Exception e){
      System.out.println("Error:"+e);//出错,打印出错信息
  }
}
}}
a. 在本机上建立Java工程,启动一个服务端程序,启动两个客户端程序,在控制台输入聊天消息,体验支持多客户端的客户端/服务端聊天对话过程。

运行结果:启动一个服务器端,两个客户端
在这里插入图片描述

b.修改客户端套接字连接的服务器地址,在两台不同的机子上分别运行客户端、一台机子上运行服务端程序,在各机的控制台输入聊天消息,体验不同机器上多客户端/服务端聊天对话过程。

将客户端的IP地址是另一台电脑的IP地址。一个设置为192.168.1.103,另一个设置为192.168.1.105
运行结果同上

聊天器第三版–java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值