项目结构

项目设计

客户端同时大量请求服务端,服务端多线程处理连接,并发序列化获得客户端发送的数据,并做出处理。

IClients

package simple.socket;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Date;

import java.util.Random;

public class IClients {

    /**

     * IServer Class

     * </br> Start 1000 client connect the server

     */

    public static void main(String[] args) {

        // start 20 clients to connect the Server

        for (int j = 0; j < 1000; j++) {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    try {

                        Socket socket = new Socket("127.0.0.1", 90);

                        ObjectOutputStream outputStream = new ObjectOutputStream(

                                socket.getOutputStream());

                        Message message = new Message();

                        message.setUserId("" + new Random().nextLong());

                        message.setMessageDate(new Date().toString());

                        message.setUserName(Thread.currentThread().getName());

                        message.setMessage(Thread.currentThread().getName()

                                + "xxxx");

                        outputStream.writeObject(message);

                        outputStream.close();

                        socket.close();

                        Thread.sleep(10);

                    } catch (UnknownHostException e) {

                        e.printStackTrace();

                    } catch (IOException e) {

                        e.printStackTrace();

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                }

            }).start();

        }

    }

}

IServer

package simple.socket;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

public class IServer {

    /**

     * IServer Class

     * Server main class

     */

    ServerSocket serverSocket = null;

    final static int SERVER_PORT = 90;

    Socket connectSocket = null;

    public IServer() {

        try {

            System.out.println("服务器启动了。。。");

            serverSocket = new ServerSocket(SERVER_PORT);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    public void startServer() {

        try {

            while (!serverSocket.isClosed()) {

                connectSocket = serverSocket.accept();

                if (connectSocket != null) {

                    IServerHandel handle = new IServerHandel(connectSocket);

                    new Thread(handle).start();

                }

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    public void shutdownServer() {

        if (!serverSocket.isClosed()) {

            try {

                serverSocket.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    public static void main(String[] args) {

        new IServer().startServer();

    }

}

IServerHandel

package simple.socket;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.net.Socket;

public class IServerHandel implements Runnable {

    /**

     * IServerHandel Class

     * </br>handle the Muliti-clients Socket connections

     */

    Socket connectSocket = null;

    ObjectInputStream inputStream = null;

    Message message = null;

    public IServerHandel(Socket connectSocket) {

        this.connectSocket = connectSocket;

    }

    public void readMsg() {

        try {

            inputStream = new ObjectInputStream(connectSocket.getInputStream());

            if ((message = (Message) inputStream.readObject()) != null) {

                System.out.println(message.getMessage());

            }

            inputStream.close();

        } catch (IOException e) {

            e.printStackTrace();

        } catch (ClassNotFoundException e) {

            e.printStackTrace();

        }

    }

    @Override

    public void run() {

        readMsg();

    }

}

Message

package simple.socket;

import java.io.Serializable;

public class Message implements Serializable {

    /**

     * message Object

     */

    private static final long serialVersionUID = -8256700753720022810L;

    String userId = "";

    String userName = "";

    String message = "";

    String messageDate = "";

    public String getUserId() {

        return userId;

    }

    public void setUserId(String userId) {

        this.userId = userId;

    }

    public String getUserName() {

        return userName;

    }

    public void setUserName(String userName) {

        this.userName = userName;

    }

    public String getMessage() {

        return message;

    }

    public void setMessage(String message) {

        this.message = message;

    }

    public String getMessageDate() {

        return messageDate;

    }

    public void setMessageDate(String messageDate) {

        this.messageDate = messageDate;

    }

}

多线程Server client的更多相关文章

  1. Qt搭建多线程Server

    起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...

  2. key-value 多线程server的Linux C++实现

    项目需求 整体思路 网络通信 字符解析 数据存储与查询 1 存储管理 2 数据查询 多线程 待改进未实现的想法 GitHub源代码 项目需求 设计一个基于Socket或基于HTTP的server,服务 ...

  3. 基于QT的多线程server

    // thread.cpp #include "thread.h" Thread::Thread(int socketDescriptor, QObject *parent) : ...

  4. 基于I/O的Server/Client实现

    在前面的文章中讲了基于NIO实现的Server/Client.本文就讲讲基于同步堵塞式I/O实现的Server/Client好与前面的NIO中的Server/Client进行对照. 网络编程中须要解决 ...

  5. NetMQ(ZeroMQ)Client => Server => Client 模式的实现

    ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库.它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(m ...

  6. docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)

    docker version Client: Version: 17.05.0-ce API version: 1.24 (downgraded from 1.29) Go version: go1. ...

  7. Redis2.2.2源码学习——Server&Client链接的建立以及相关Event

    Redis中Server和User建立链接(图中的client是服务器端用于描述与客户端的链接相关的信息) Redis Server&Client链接的建立时相关Event的建立(图中的cli ...

  8. Socket编程--基础(基本server/client实现)

    IPv4套接口地址结构 IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中 LINUX结构下的常用结构,一般创建套接字的时候都要将这个结构里面的 ...

  9. 用XMLRPC开服务进行server/client通信

    本文讲一下怎样用python的xmlrpc开服务,进行server/client的通信. 应用场景:1)需多client訪问应用程序给予应答情况--网页服务.  2)数据极大,希望载入一次.后面仅仅用 ...

随机推荐

  1. java中值传递和引用传递

    最近工作中使用到了值传递和引用传递,但是有点懵,现在看了下面的文章后清晰多了.一下是文章(网摘) 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...

  2. CentOS安装squid代理服务器

    Squid是一个Linux系统下优秀的代理服务器软件.Squid可以配置普通上网代理(正向代理).反向代理.透明代理.系统是CentOS6.2.Squid主机IP为192.168.1.100. 安装s ...

  3. JavaEE第一天知识点总结

    JavaEE第一天知识点总结 持久化是将程序中的数据在瞬时状态和持久状态间转换的机制 DAO: 英文全称: Date Access Object(数据存取对象) 位于业务逻辑和持久化数据之间 实现对持 ...

  4. UNDO

    UNDO及事物 undo表空间是Oracle独有,在oracle开启一个事物之后,oracle对数据进行修改,同时,会把修改前的数据保存到UNDO表空间的UNDO段里.undo表空间中会自动分配und ...

  5. Python 2.7_发送简书关注的专题作者最新一篇文章及连接到邮件_20161218

    最近看简书文章关注了几个专题作者,写的文章都不错,对爬虫和数据分析都写的挺好,因此想到能不能获取最新的文章推送到Ipad网易邮箱大师.邮件发送代码封装成一个函数,从廖雪峰大神那里学的  http:// ...

  6. nodejs+mysql

    接着上一篇的php+mysql,我们来试一试nodejs怎么实现数据的增删查改. Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件 ...

  7. 如何写一个简单的shell

    如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...

  8. subversion(SVN)安装配置

    简介subversion(简称svn)是近年来崛起的版本管理软件系统,是cvs的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件.Subversion是一个版本控制系统,相对于的RCS. ...

  9. Portable Basemap Server:多数据源多客户端的底图服务器

    Portable Basemap Server:多数据源多客户端的底图服务器 [poll id=”1″]2014.3.8更新v3.1~在线切片转换为MBTiles时,增加RecreateEmptyCa ...

  10. 关于前端build工具

    第一.build工具的核心就是帮你安装和帮你做事.安装类工具:Npm.Bower.Yeoman等          做事类工具:Node.Grunt.gulp.Webpack等 安装类工具几乎什么东西 ...