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. 【转】对于HttpClient和HtmlUnit的理解

    原文地址:http://www.haohaoblog.com/?p=1327&utm_source=tuicool 做Java编程的人其实,很多不懂SEO,也不知道如何让百度收录等等,当然,对 ...

  2. 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)

    强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...

  3. Filebeat issue 排查--single.go:140: ERR Connecting error publishing events (retrying): dial tcp ****:5044: i/o timeout

    我个人用docker搭建了一套日志分析平台:ELK+Filebeat 在正常跑了半个多月之后,Kibana刷新日志时突然发现日志不在更新了,停在某个时刻,就再也没有新log. 首先我查看了elk,lo ...

  4. Express4.x动态的销毁或者替换中间件(app.unuse)

    需求描述 expres4.x托管静态资源时以中间件的方式将server-static挂载到app上,正常的使用没有问题,但是有时候我们需要动态的托管一些静态资源,也就是静态资源的目录不确定的时候该怎么 ...

  5. Java8中 Parallel Streams 的陷阱 [译]

    译注:文本有所精简和意译 原文链接 : Java Parallel Streams Are Bad for Your Health!原作者:OLEG SHELAJEV 翻译:Hason 转载请保留相关 ...

  6. Java设计模式之《代理模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6525527.html 代理模式算是我接触较早的模式,代理就是中介,中间人.法律上也有代理, ...

  7. 一个好用的几乎没有Callback的Android异步库

    android-async-task 这是一个Android平台处理复杂异步任务的库 (https://github.com/gplibs/android-async-task) 1. 安装方法 gr ...

  8. HTML确认密码

    html确认密码   今天准备分享一个小知识点,就是确认登录界面 <body ><form>输入户名: <input type="text" name ...

  9. OpenvSwitch Port Mirror in OpenStack Neutron

    前言 最近使用搭建了一个基于VXLAN的OpenStack 环境,发现要去dump ovs interfaces的包其实还是蛮麻烦的, 经过多番努力,找到了如下的在openstack下网络环境的一些t ...

  10. Caliburn.Micro - 框架搭建

    简介:Caliburn.Micro是Caliburn的一个轻量级版本开源架构,可以用于wpf,sliverlight,wp7等,和注重模块化的Prism比起来也有许多优点,具体比较可以参考 此文 ht ...