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内存中的 buffer 和 cache 到底是个什么东东?

    Linux 中的 free 命令,会输出: total 总量 used  已使用 free 空闲 shared 共享内存 buffers cached 前面四项都比较好理解,一看我也就知道啥意思了.但 ...

  2. vue2.0全局组件之pdf

    目的:像elementUI那样注册全局组件 预览pdf文件 技术支持:使用火狐的pdf.js http://mozilla.github.io/pdf.js/ 准备:新建一个CPdf.vue文件,把火 ...

  3. 全文搜索 Contains 与like 的区别

    全文搜索:是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式. ...

  4. yum的用法

    yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum update不同的是,连旧的淘汰的包 ...

  5. 数据库笔试面试题库(Oracle、MySQL等)

    数据库笔试面试题库(Oracle.MySQL等) 版权声明:版权所有,欢迎分享本文,转载请保留出处,否则追究法律责任,谢谢合作. 注:本文将持续更新,可关注作者微信公众号以便获得最新笔试面试资料. ⊙ ...

  6. 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字

    2272: [Usaco2011 Feb]Cowlphabet 奶牛文字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 97 ...

  7. Java基础之路(四)--流程控制语句

    本次我们来聊一聊Java当中的循环语句. 循环语句分三种:1.for2.while3.do--while. 三种循环语句的任务是不同的,方法也是不同的.当然他们各自的流程图也是不一样的. 3.1 wh ...

  8. php错误的处理

    错误的分类 通常分3种: 语法错误: 程序运行之前,都要先检查语法.如果语法有错误,就会立即报错,并且不会去执行程序. 运行时错误: 就是在程序语法检查通过后,,开始运行程序并在此过程中遇到的错误.常 ...

  9. flex中创建弹出窗口,并传值

    在flex页面中首先创建一个弹出窗口,代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Titl ...

  10. Python 一些有趣的技巧哦!

    #Python 技巧命令 python 如一股清流,可以说屌到飞起,下面咱就来看看一些屌的东西 ### python2 最简单的web服务 ` python -m SimpleHTTPServer 8 ...