import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
 
class Server extends Thread
{
    private BufferedReader in = null;
    private PrintWriter out = null;
    private Socket socket = null;
    public static int count=0;
    public JabberClient dangQianClient=null;
    Scanner sc = new Scanner(System.in);
 
    class JieShou extends TimerTask
    {
 
        String temp = null;
 
        public void run()
        {
            try
            {temp = in.readLine();
            if(temp!=null)    
 
                System.out.println(temp);
 
            } catch (Exception e)
            {System.out.println( e.getMessage());
            }
        }
    }
 
    public Server(Socket socket) throws IOException
    {
 
        this.socket = socket;
        System.out.println("有一个新的客户端连接"+socket);
        System.out.println("当前的客户端数目: "+ ++count);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()), true);
        Timer timer = new Timer();
        timer.schedule(new JieShou(), 100, 300);
        this.start();//开始线程
    }
 
    public void run()
    {
        while (true)
        {
            String temp=sc.next();//将此写到线程内,可与当前连接客户端对话  但是 并不能知道连接的是哪个客户端
             out.println("服务器: " + temp);
        }
 
 
    }
}
 
public class MultiJabberServer
{
 
    public static final int port = 8080;
 
    public static void main(String[] args) throws IOException
    {
 
        InetAddress addr=InetAddress.getLocalHost();
        System.out.println(addr.getHostAddress());
        ServerSocket serverSocket = new ServerSocket(port);
        try
        {
            while (true)
            {
 
                Socket socket = serverSocket.accept();//循环等待客户端连接
                try
                {
                    new Server(socket);//有一个客户端连接即开始一个新的线程与客户端通信  然后继续等待客户端的连接请求
                } catch (Exception e)
                {
                    socket.close();
                }  
            }
        } finally
        {
            serverSocket.close();
            System.exit(0);
        }
    }
 
}
 
 
 
 
 

基于TCP协议的服务器(多线程)的更多相关文章

  1. 基于TCP协议的服务器(单线程)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import  ...

  2. 基于TCP协议的客户端

    基于TCP协议的客户端 此客户端能用于下一篇博客的单线程服务器和多线程服务器 import java.io.BufferedReader; import java.io.IOException; im ...

  3. 基于TCP协议的项目架构之Socket流传输的实现

    项目背景  某银行的影像平台由于使用时间长,服务器等配置原因,老影像系统满足不了现在日益增长的数据量的需求,所以急需要升级改造.传统的影像平台使用的是Oracle数据库和简单的架构来存储数据(视频.图 ...

  4. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  5. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  6. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

  7. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  8. 浅析C#基于TCP协议的SCOKET通信

    TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实 ...

  9. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

随机推荐

  1. JPA的泛型DAO设计及使用

    使用如Hibernate或者JPA作为持久化的解决方案时,设计一个泛型的DAO抽象父类可以方便各个实体的通用CRUD操作.由于此时大部分实体DAO的CRUD操作基本一样,采用泛型设计解决这个问题,带来 ...

  2. ubuntu 安装phpmyadmin

    参考文章: http://www.111cn.net/database/mysql/43957.htm    access错误的解决方法 1 首先下载  去官网下载phpmyadmin 2  然后直接 ...

  3. JavaScript学习总结【12】、JS AJAX应用

    1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...

  4. ODBC方式连接Informix数据库

    公司某个报表系统使用Informix数据库,在谋划使用Perl语言写数据采集程序后,花费了很多时间建立Perl访问Informix连接.恰巧Windows下ActivePerl的CPAN中又没有DBD ...

  5. SORT_AREA_RETAINED_SIZE

    manual pga: SORT_AREA_RETAINED_SIZE specifies (in bytes) the maximum amount of the user global area ...

  6. EF4 Code First和EF6 Code First链接mysql的方法

    1.首先需要下载安装.Net的Mysql驱动 下载地址如下:http://dev.mysql.com/downloads/connector/net/ 2.配置Web.Config EF6: 配置链接 ...

  7. 集合工具类 - CollectionUtil.java

    集合工具类,提供数组转LIST.数组转SET.合并集合.计算笛卡儿积等方法. 源码如下:(点击下载 -  CollectionUtil.java.ArrayUtil.java.commons-lang ...

  8. jQuery制作Web全屏效果

    需要的资源 1.jQuery版本库是必不可少的2.jQuery FullScreen plugin如果你下载不方便的话,你可以直接把下面的代码copy到你本地JQuery FullScreen plu ...

  9. 降维(一)----说说主成分分析(PCA)的源头

    降维(一)----说说主成分分析(PCA)的源头 降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps --------------- ...

  10. Java final知识点

    被final修饰的值,只可以被赋值一次. 被final修饰的类,其所有方法就变成了final方法,该类也不能被继承. 被final修饰的方法,不能在子类中重写. public static void ...