1 1、 设备请求分发服务器,分发服务器返回有效的socket服务器ip与port,然后断开连接。2 a) 设备与服务器建立连接。3 b) 服务器接收到连接请求后,立即将分配好的socket服务器ip与port信息响应给设备。4 c) 服务器主动断开socket连接。5 2、 设备得到ip与port以后,设备去连接socket服务器,然后与其进行协议通讯。6 a) 设备连接到socket服务器。7 b) socket服务器响应连接成功响应信息。8 c) 设备与socket服务器保持长链接通讯。9

10 *. 若设备未收到连接成功响应则再次尝试连接,若三次请求依旧没有成功建立连接,那么设备需要去请求分发服务器然后再重新上述操作。11 *. 当设备在异常情况下链接不上socket服务器时,依旧尝试三次若不能成功,则直接请求分发服务器,然后再重复上述操作。12

13 分发服务器代码:14 分发服务与客户端是短链接:15 packagecom.easygo.server;16

17 importjava.io.IOException;18 importjava.net.ServerSocket;19 importjava.net.Socket;20 importjava.util.concurrent.ExecutorService;21 importjava.util.concurrent.Executors;22

23 public class CenterServer implementsRunnable{24 ServerSocket serverSocket=null;25 static volatile String server_ip="127.0.0.1";26 static volatile int serverport1=8085;27 static volatile int serverport2=8086;28 public static voidmain(String[] args) {29 new Thread(newCenterServer()).start();30

31 }32

33 @Override34 public voidrun() {35 ExecutorService cachedThreadPool = null;//线程池

36 cachedThreadPool = Executors.newCachedThreadPool();//线程池

37 try{38 serverSocket=new ServerSocket(9999);39 } catch(IOException e1) {40 //TODO Auto-generated catch block

41 e1.printStackTrace();42 }43 while(true){44 try{45

46 cachedThreadPool.execute(newServerRun(serverSocket.accept()));47 System.out.println("有一个客户端连进来了..");48 } catch(IOException e) {49 //TODO Auto-generated catch block

50 e.printStackTrace();51 }52

53 }54 }55

56

57

58 }59 class ServerRun implementsRunnable{60 Socket socket=null;61 ServerRun(Socket socket){62 this.socket=socket;63

64 }65 @Override66 public voidrun() {67

68 receive();69

70

71 }72 public voidsend(String message){73 try{74 socket.getOutputStream().write(message.getBytes());75 socket.getOutputStream().flush();76 } catch(IOException e) {77 //TODO Auto-generated catch block

78 e.printStackTrace();79 }80

81

82 }83 public voidreceive(){84

85 byte[]tmp=null;86 String message=null;87

88 boolean runs=true;89 while(runs){90 if(null!=socket){91 tmp=new byte[30];92

93 @SuppressWarnings("unused")94 int count =0;95 try{96 while((count=socket.getInputStream().read(tmp))!=-1){97 message=newString(tmp);98 System.out.println("Clent:"+message.trim());99 if(message.trim().split(",")[0].equals("login")&&message.trim().split(",")[1].equals("1")){100

101 send("login,"+CenterServer.server_ip+","+CenterServer.serverport1);102 }else if(message.trim().split(",")[0].equals("login")&&message.trim().split(",")[1].equals("2")){103

104 send("login,"+CenterServer.server_ip+","+CenterServer.serverport2);105 }else if(message.equals("0")){106 if(socket!=null){107 socket.close();108

109 }110

111

112 }113 if(socket.isClosed()){114 runs=false;115 }116 tmp=null;117 message=null;118 tmp=new byte[30];119 }120

121

122 } catch(IOException e) {123

124 }125

126 }127

128

129 }130 }131

132 }133

134

135

136 客户端代码案例:137

138 packagecom.easygo.server;139

140

141 importjava.io.IOException;142 importjava.net.Socket;143

144

145 public class Client implementsRunnable{146 Socket socket=null;147 final int CENTER_SERVER_PORT=9999;//分发服务器端口

148 final String CENTER_SERVER_IP="127.0.0.1";149 intCENTER_SERVER_PORTS;150 String CENTER_SERVER_IPS;151 boolean conn=false;152 volatile booleanreceive;153 public static voidmain(String[] args) {154 new Thread(newClient()).start();155 }156

157 @Override158 public voidrun() {159 try{160 connection();161 } catch(Exception e) {162 //TODO Auto-generated catch block

163 e.printStackTrace();164 }165

166

167 }168

169 public void connection() throwsException{170

171 while(true){172 if(null==socket&&conn==false){//登入分发服务器

173 socket=newSocket(CENTER_SERVER_IP, CENTER_SERVER_PORT);174 receive=true;175

176 send("login,1");//login,登入分发服务器,1指定登入服务

177

178

179 newThread(){180 public voidrun(){181 try{182 receiveX();183 } catch(IOException e) {184 //TODO Auto-generated catch block

185 e.printStackTrace();186 }187

188 }189

190 }.start();191 }else if(null==socket&&conn==true){//登入指定服务

192 socket=newSocket(CENTER_SERVER_IPS, CENTER_SERVER_PORTS);193 receive=true;194 newThread(){195 @Override196 public voidrun(){197 while(true){198 send("message,我是客户端");199

200 try{201 Thread.sleep(1000);202 } catch(InterruptedException e) {203 //TODO Auto-generated catch block

204 e.printStackTrace();205 }206 }207

208

209 }210

211 }.start();212 newThread(){213 public voidrun(){214 try{215 receiveX();216 } catch(IOException e) {217 //TODO Auto-generated catch block

218 e.printStackTrace();219 }220

221 }222

223 }.start();224 }225

226 Thread.sleep(1000);227

228 }229 }230

231 public voidsend(String message){232 System.out.println("send:"+message);233 try{234 socket.getOutputStream().write(message.getBytes());235 socket.getOutputStream().flush();236 } catch(IOException e) {237

238 }239

240 }241

242 public void receiveX() throwsIOException{243 byte[]tmp=null;244 String messaage=null;245 while(receive){246 if(null!=socket){247 tmp=new byte[50];248 @SuppressWarnings("unused")249 int count=0;250 while((count=socket.getInputStream().read(tmp))!=-1){251 messaage=newString(tmp);252 System.out.println("result:"+messaage);253 if(messaage.trim().contains("login")){254 String[]arr=messaage.trim().split(",");255 System.out.println(":"+arr[1]+":"+arr[2]);256 CENTER_SERVER_IPS=arr[1];257 CENTER_SERVER_PORTS=Integer.parseInt(arr[2]);258

259

260 conn=true;261 //send("0");

262 closeXX();//获取到对应服务ip和端口后断开连接

263 receive=false;//264

265

266 }else if(messaage.trim().contains("message")){267 send(messaage);268

269 }270 tmp=null;271 tmp=new byte[50];272 }273

274

275

276

277 }278 tmp=null;279 messaage=null;280 }281

282 }283 public voidcloseXX(){284 if(this.socket!=null){285 try{286 socket.close();287 socket=null;288 } catch(IOException e) {289 //TODO Auto-generated catch block

290 e.printStackTrace();291 }292

293 }294 }295 }296

297

298 指定登入处理客户端服务代码299 packagecom.easygo.server;300

301 importjava.io.IOException;302 importjava.net.ServerSocket;303 importjava.net.Socket;304 importjava.util.concurrent.ExecutorService;305 importjava.util.concurrent.Executors;306

307 public class Server implementsRunnable{308 volatile int port=8086;309 ServerSocket serverSocket=null;310 public static voidmain(String[] args) {311 new Thread(newServer()).start();312 }313

314 @Override315 public voidrun() {316 int count=0;317 try{318 serverSocket=newServerSocket(port);319 ExecutorService cachedThreadPool = null;//线程池

320 cachedThreadPool = Executors.newCachedThreadPool();//线程池

321

322 while(true){323 cachedThreadPool.execute(newServerRunS(serverSocket.accept()));324 System.out.println("a client conn:"+count++);325

326 }327 } catch(IOException e) {328 //TODO Auto-generated catch block

329 e.printStackTrace();330 }331

332 }333

334 }335 class ServerRunS implementsRunnable{336 Socket socket=null;337 ServerRunS(Socket socket){338

339 this.socket=socket;340 }341 @Override342 public voidrun() {343 byte[]tmp=null;344

345 while(true){346

347 if(socket!=null){348 tmp=new byte[30];349 @SuppressWarnings("unused")350 int count=0;351 try{352 while((count=socket.getInputStream().read(tmp))!=-1){353 System.out.println("客户端发来的消息:"+newString(tmp));354

355 }356 } catch(IOException e) {357 //TODO Auto-generated catch block

358 e.printStackTrace();359 }360

361 }362 tmp=null;363 }364 }365

366

367

368 }369

370 流程:371 1启动server372 2启动CenterServer服务373 3启动客户端一,参数(login,1)374 4启动客户端二,参数(login,2)375

376 运行结果:377 客户端1378 send:login,1

379 result:login,127.0.0.1,8085

380 send:message,我是客户端381 send:message,我是客户端382 send:message,我是客户端383 send:message,我是客户端384 send:message,我是客户端385 send:message,我是客户端386

387 客户端2388 send:login,2

389 result:login,127.0.0.1,8086

390 send:message,我是客户端391 send:message,我是客户端392 send:message,我是客户端393 send:message,我是客户端394 send:message,我是客户端395 send:message,我是客户端396

397 分发服务器:398 有一个客户端连进来了399 UUlogin,2

400 有一个客户端连进来了401 UUlogin,1

402

403 服务器1(8085端口)404 8085

405 客户端发来的消息:message,我是客户端406 客户端发来的消息:message,我是客户端407 .408 .409 .410 服务器1(8086端口)411 8086

412 客户端发来的消息:message,我是客户端413 客户端发来的消息:message,我是客户端414 .415 .416 .

java socket负载均衡_Java Socket分发服务负载均衡相关推荐

  1. Java Socket分发服务负载均衡

    1 1. 设备请求分发服务器,分发服务器返回有效的socket服务器ip与port,然后断开连接.2 a) 设备与服务器建立连接.3 b) 服务器接收到连接请求后,立即将分配好的socket服务器ip ...

  2. java socket远空_JAVA Socket超时浅析

    套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条 ...

  3. java socket编程心跳_Java Socket编程心跳包创建实例解析

    1.什么是心跳包? 心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包. 用来判断对方(设备,进程或其它网元)是否正常运行,采用 ...

  4. java socket 线程池_java socket编程的一个例子(线程池)

    服务器程序EchoServer.java: import java.io.*; import java.net.*; import java.util.concurrent.*; public cla ...

  5. java socket 循环读取_java socket tcp(服务器循环检测)

    刚才看了下以前写了的代码,tcp通信,发现太简单了,直接又摘抄了一个,运行 博客:http://blog.csdn.net/zhy_cheng/article/details/7819659 优点是服 ...

  6. java socket 全双工客户端_java socket实现全双工通信

    单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输. 如果 ...

  7. java客户端服务器代码_Java Socket通信 客户端服务器端基本代码

    [服务器端] import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import ...

  8. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信

    Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...

  9. java socket聊天工具_java+socket 简易聊天工具

    1.服务器端程序 package com.test3; import java.io.*; import java.net.*; import java.awt.*; import java.awt. ...

最新文章

  1. srm32f4按键蜂鸣器_stm32 用中断实现按键点灯和蜂鸣器鸣叫(固件库版)
  2. 颜宁课题组再发Cell!1个月时间内4篇顶刊!
  3. vue复选框组件自定义对勾_vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解...
  4. 拓端tecdat|R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
  5. Linux使用Blowfish生成密码,linux批量生成密码
  6. IPTV Checker(直播源自动检测工具)
  7. HTML导航栏的四种制作方法
  8. win10手柄震动测试软件,win10系统测试手柄震动频率的操作方法
  9. sql查询各科成绩前三名
  10. 挂载命令 mount
  11. 更改csv默认分隔符
  12. 您好!欢迎关注异贝!异贝是中国8000万中小微企业忠实的朋友,与您一起成长。异贝商学院今天与您分享:健身行业异贝引客、锁客方案设计!
  13. 30行,金额转人民币大写的代码
  14. java线程池newfi_Java 线程池中的线程复用是如何实现的?
  15. oracle 修改lsnrctl,Oracle中 lsnrctl命令使用总结(推荐)
  16. MySQL为什么会抖一下
  17. JAVA操作xml文件
  18. IDM移动端功能升级说明
  19. android平板吃鸡开什么画质,ipad2018玩吃鸡可以开什么画质 | 手游网游页游攻略大全...
  20. Android stuido 解决Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file

热门文章

  1. ActiveReports for .NET 3 破解
  2. Laravel 事件侦听的几个方法 [Trait, Model boot(), Observer Class]
  3. ant design select 坑总结
  4. Python的numpy库中rand(),randn(),randint(),random_integers()的使用
  5. 在Sublime Text3中运行PHP代码
  6. 图解MySQL数据库的安排和把持-1
  7. 园内ORM讨论的经典文章及评论[转]
  8. php 缺少参数,php - 如何验证JSON响应中是否缺少参数-Laravel 6 - 堆栈内存溢出
  9. Go语言中奇怪的if语句
  10. android 常用混淆,Android常用的代码混淆整理【原创】