package test_teacher;

import java.net.*;
import java.io.*;

public class MultiTalkServer
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serverSocket = null;
        boolean listening = true;
    int clientNumber = 0;

        try {
            serverSocket = new ServerSocket(4444);
        }
        catch (IOException e){
            System.err.println("Could not listen on port: 4444.");
            System.exit(-1);
        }

        while (listening)
    {
        Socket socket;
        socket = serverSocket.accept();  //程序将在此等候客户端的连接
        clientNumber++;
        new MultiTalkServerThread(socket, clientNumber).start();
    }
        serverSocket.close();
    }
}

class MultiTalkServerThread extends Thread
{
    private Socket socket = null;
    private int clientNumber;

    public MultiTalkServerThread(Socket socket, int clientNumber)
    {
        super("MultiTalkServerThread");
        this.socket = socket;
        this.clientNumber = clientNumber;
        System.out.println("Accept Client" + clientNumber);
    }

    public void run()
    {

        try {
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);  //auto flush
            BufferedReader in = new BufferedReader(
                        new InputStreamReader(
                        socket.getInputStream()));

            BufferedReader sin = new BufferedReader( new InputStreamReader( System.in ) );

            String sinputLine, inputLine;
            boolean sinbye = false;
            boolean inbye = false;
                    
            inputLine = in.readLine();
            System.out.println( "from Client" + clientNumber + ": " + inputLine );

            while( true )
            {
                if(inputLine.equals("Bye."))
                {
                    inbye = true;
                    sinbye = true;
                    sinputLine = "Bye.";
                    out.println(sinputLine);
                    out.flush();
                    System.out.println("Server: " + "Reply to client " + clientNumber +" : " + sinputLine);
                }
                else
                {
                    sinputLine = "Reply to client " + clientNumber +" : " + inputLine;
                    out.println(sinputLine);
                    out.flush();
                    System.out.println("Server: " + sinputLine);
                }

                if( sinbye == true && inbye == true )
                    break;

                if( inbye == false )
                {
                    inputLine = in.readLine();
                    System.out.println( "form Client " + clientNumber + ": " + inputLine );
                }
            }

            out.close();
            in.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

QQ_MultiTalkServer的更多相关文章

  1. django模型操作

    Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表        

随机推荐

  1. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  2. Laravel中间件

    先谈一谈中间件的使用场景,比如路由转到一张页面,我们需要记录用户的cookie,或者检测用户的访问权限,这些操作如果全写在控制器里是不合适的,因为随着业务的扩充,控制器里的业务逻辑会越来越臃肿,难以维 ...

  3. iOS集成ApplePay

    Apple Pay正式在国内上线的那天,一起工作的小伙伴就走进了Starbucks,7-11等带有银联闪付的店进行了尝鲜.不管是否要再次输入一次密码,但是它的出现确实给我们带来了极大的便捷.下面就尝试 ...

  4. JS入门(一)

    在学js之前,我们应该先清楚js是什么,js全称JavaScript.是一门基于对象和事件的,有安全性的脚本语言.所谓脚本语言,就是一行一行执行的,就像剧本一样,一句句的往下读.而对象和事件,则是js ...

  5. 第一章 初始java

    一.单词 public:公共的          static:静态的        void:空的          class:类       print:打印     line:排    pro ...

  6. 3450: Tyvj1952 Easy

    3450: Tyvj1952 Easy Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 269  Solved: 198[Submit][Status] ...

  7. DAX/PowerBI系列 - 参数表(Parameter Table)

    DAX/PowerBI系列 - 参数表(Parameter Table) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★☆(4星) 概况: 这个模式比较简单灵活,而且很实用.所用的DAX语句也比较简 ...

  8. servlet匹配规则和顺序

    1.  写法 ①完全匹配:以“/”开头,以字母(非“*”)结束    如:<url-pattern>/test/list.do</url-pattern> ②目录匹配:以“/” ...

  9. dtree大型树插件

    一.dtree简介 dtree是一个由JavaScript编写成的简单的树形菜单组件,目前免费并且开源.同时支持动态从数据库引入数据. 二.使用方法 1.下载dtree.js及dtree.css 下载 ...

  10. python 接口自动化测试(四)

    说完了SOAP协议的接口自动化 该说下http协议的接口测试了 HttpService.py import requests import sys reload(sys) sys.setdefault ...