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. Angular.js之服务与自定义服务学习笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 点击Robot Framework的桌面快捷图标后,没有反应(没有打开应用程序)

    http://www.cnblogs.com/zhengyihan1216/p/6397478.html  这篇文章中介绍了如何安装Robot Framework以及如何在桌面上创建快捷方式. 但是有 ...

  3. JS中的this 指向问题

    我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这 ...

  4. 获取手机 id 与 ip

    //id #import <AdSupport/AdSupport.h> //ip #include <ifaddrs.h> #include <arpa/inet.h& ...

  5. swift -- 类中的方法

    一. 引用类型  类 在类中定义方法 class Person { //属性 var name : String = "" //方法 //实例方法 : 在类里面创建一个方法 fun ...

  6. 用Jquery做一个时间日期选择器

    今天我们就用Jquery做一个时间日期选择器,当打开网页时,文本框里面显示的是当前的日期,点击文本框可以出现年.月.日的下拉菜单,并且可以选择,会根据年份的选择判断是否是闰年,从而改变二月的天数,闰年 ...

  7. android开发艺术探索读书笔记之-------view的事件分发机制

    View的点击事件的分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生后,系统需要把这个事件传递给一个具体的View,而这个过程就是分发过程. 分发过程主要由以下 ...

  8. win8和ubuntu双系统

    硬盘安装的话只要分够内存和做好开机启动项就好了,u盘安装要注意分区(挂载)了推荐: http://wenku.baidu.com/view/5052f19b51e79b8968022623.html ...

  9. Web API框架学习——路由(一)

    HttpConfiguration(ASP.NET Web API管道的配置是通过HttpConfiguration来完成) : 包括路由注册在内的对整个ASP.NET Web API管道的配置是通过 ...

  10. 关于js中两种定时器的设置及清除(转载)

    1.JS中的定时器有两种: window.setTimeout([function],[interval]) 设置一个定时器,并且设定了一个等待的时间[interval],当到达时间后,执行对应的方法 ...