多线程Server client
项目结构

项目设计
客户端同时大量请求服务端,服务端多线程处理连接,并发序列化获得客户端发送的数据,并做出处理。
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的更多相关文章
- Qt搭建多线程Server
起因是MySQL在Android上没有驱动.也就是说,移动端想要访问远程数据库,必须通过一台(或多台)PC进行中转. 中转PC作为Server,接受来自移动端Socket访问数据库的要求,Server ...
- key-value 多线程server的Linux C++实现
项目需求 整体思路 网络通信 字符解析 数据存储与查询 1 存储管理 2 数据查询 多线程 待改进未实现的想法 GitHub源代码 项目需求 设计一个基于Socket或基于HTTP的server,服务 ...
- 基于QT的多线程server
// thread.cpp #include "thread.h" Thread::Thread(int socketDescriptor, QObject *parent) : ...
- 基于I/O的Server/Client实现
在前面的文章中讲了基于NIO实现的Server/Client.本文就讲讲基于同步堵塞式I/O实现的Server/Client好与前面的NIO中的Server/Client进行对照. 网络编程中须要解决 ...
- NetMQ(ZeroMQ)Client => Server => Client 模式的实现
ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库.它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(m ...
- 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. ...
- Redis2.2.2源码学习——Server&Client链接的建立以及相关Event
Redis中Server和User建立链接(图中的client是服务器端用于描述与客户端的链接相关的信息) Redis Server&Client链接的建立时相关Event的建立(图中的cli ...
- Socket编程--基础(基本server/client实现)
IPv4套接口地址结构 IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中 LINUX结构下的常用结构,一般创建套接字的时候都要将这个结构里面的 ...
- 用XMLRPC开服务进行server/client通信
本文讲一下怎样用python的xmlrpc开服务,进行server/client的通信. 应用场景:1)需多client訪问应用程序给予应答情况--网页服务. 2)数据极大,希望载入一次.后面仅仅用 ...
随机推荐
- BAT的面试经验_摘抄
一.心态 心态很重要! 心态很重要! 心态很重要! 重要的事情说三遍,这一点我觉得是必须放到前面来讲. 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公 ...
- windows下多字节和宽字节转换
先简单说下什么是多字节和宽字节. 多字节是指使用多个字节(1-3)表示一个字符.比如gbk使用英文占一个字节,中文占2个,这个就是多字节了.utf-8是使用1-3个字节表示字符.还有big5等等. 宽 ...
- asp.net core实现SHA1withRSA
public sealed class SHA1withRSA { /// <summary> /// pem SHA1withRSA签名 /// </summary> /// ...
- Entity Framework走马观花之把握全局 (转)
上一篇<Entity Framework技术导游系列开篇与热身 > ========================================= 在深入学习某项技术之前,应该努力形成 ...
- 重走java---Step 1
开发环境 1.使用java开发,首先要完成java运行环境的安装配置,JVM可以说是java最大的优点之一,就是它实现了java一次编译多次运行,关于JVM以后再详谈.安装配置JDK,完成java开发 ...
- Linux驱动学习之常用的模块操作命令
1.常用的模块操作命令 (1)lsmod(list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 (2)insmod(install module,安装模块),功能是向当前 ...
- 深入理解js——作用域和上下文环境
如图除全局作用域外,每个函数都会创建自己的作用域.作用域在函数定义时就确定了,而不是在函数调用时确定. 下面按照程序执行的步骤加上上下文环境. 第一步:程序加载时已经确定全局上下文环境,并随着程序的执 ...
- iphone 开源汇总(转)
原文地址 http://blog.csdn.net/devday/article/details/6105793 扫描wifi信息: http://code.google.com/p/uwecaugm ...
- Android菜鸟成长记9 -- selector的用法
在项目开发的时候,由于系统给出的控件不够美观,因此开发时领导常常要我更改下界面,用美工给的图片取代系统图片.开始时,我只是给按钮等设置一下背景图片,这样做虽然美观了,但界面看起来却比较死板,比如用户点 ...
- maxiang.io css
/**设置你自己的CSS.例如:h1 { border-bottom: 1px solid #ccc; line-height:1.6;}body { background:#FDFFD0} **/p ...