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. 在IIS中部署Asp.net Mvc

    概述: 最近在做一个MVC 3的项目,在部署服务器时破费了一番功夫,特将过程整理下来,希望可以帮到大家! 本文主要介绍在IIS5.1.IIS6.0.IIS7.5中安装配置MVC 3的具体办法! 正文: ...

  2. smarty模板调数据库并做添加删除修改和分页

    smarty模板只要就是实现分离效果所以每个功能都需要两个页面一个是HTML  和 PHP  两部分组成 使用smarty模板要在main文件夹下面创建login.php文本,要用smarty模板首先 ...

  3. input解决浏览器记住密码问题

    <input type="password" name="" id="">可以这样写 <input type=" ...

  4. HTML初学者常用标签及属性

    1.HTML5头部结构   [DOCTYPE html] 声明文档类型为HTML5文件. 文档声明在HTML5文档必不可少,且必须放在文档的第一行.   [meta标签] 1-charset属性:单独 ...

  5. wemall app商城源码Android之Native(原生)支付模式一demo

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Native(原生)支付模式一demo,供技术 ...

  6. 1821: [JSOI2010]Group 部落划分 Group

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1308  Solved: 627[Su ...

  7. win8和ubuntu双系统

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

  8. javascript 随机显示指定内容

    今天碰到一个需求,一个页面显示赞助厂商的信息,但是厂商要求排序要随机排,因为是个静态页面不是读取数据库的,所以打算用js来控制 var arr = new Array('张三', '李四', '王五' ...

  9. mybatis 使用@Select 注解,因为字符编码不一致导致mybatis 报错

    使用 mybatis 的@Select 注解, @Select({ "<script>select " + ALL_COLUMNS + " from &quo ...

  10. (5)java中的常用API,其实就是一些常见类的使用

    String方法来介绍 两种声明: 1.String str="1";这种首先检查常量池中是否已经有该常量字符串"1" 如果有的话,不会创建新的常量字符串,若有 ...