java心跳包检测Word文档格式.docx
- 文档编号:16027805
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:11
- 大小:17.09KB
java心跳包检测Word文档格式.docx
《java心跳包检测Word文档格式.docx》由会员分享,可在线阅读,更多相关《java心跳包检测Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
importcn.edu.zju.cst.mina.im.server.handler.ServerControler;
publicclassUserStateManageextendsThread{
//在线用户状态列表
staticHashMap<
Integer,UserState>
userStateList=newHashMap<
();
ObjecthashLock=newObject();
//当前的连接数和工作线程数
staticintworkThreadNum=0;
staticintsocketConnect=0;
privateServerSocketserverSocket;
//服务器IP
privateStringhost="
10.82.81.79"
;
//服务器端口
privateintstateReportPort=60001;
//设置心跳包的结束标记
StringendFlag="
<
/protocol>
"
CharSequencecsEndFlag=endFlag.subSequence(0,10);
//扫描间隔
privateintscanTime=1800;
@Override
publicvoidrun(){
//绑定端口,并开始侦听用户的心跳包
serverSocket=startListenUserReport(stateReportPort);
if(serverSocket==null){
System.out.println("
【创建ServerSocket失败!
】"
);
return;
}
//启动扫描线程
ThreadscanThread=newThread(newscan());
scanThread.start();
//等待用户心跳包请求
while(true){
Socketsocket=null;
try{
socketConnect=socketConnect+1;
//接收客户端的连接
socket=serverSocket.accept();
//为该连接创建一个工作线程
ThreadworkThread=newThread(newHandler(socket));
//启动工作线程
workThread.start();
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*创建一个ServerSocket来侦听用户心跳包请求
*@paramport指定的服务器端的端口
*@return返回ServerSocket
*@authordream
*/
publicServerSocketstartListenUserReport(intport){
try{
ServerSocketserverSocket=newServerSocket();
if(!
serverSocket.getReuseAddress()){
serverSocket.setReuseAddress(true);
serverSocket.bind(newInetSocketAddress(host,port));
【开始在"
+serverSocket.getLocalSocketAddress()+"
上侦听用户的心跳包请求!
returnserverSocket;
}catch(IOExceptione){
【端口"
+port+"
已经被占用!
if(serverSocket!
=null){
if(!
serverSocket.isClosed()){
try{
serverSocket.close();
}catch(IOExceptione1){
e1.printStackTrace();
}
}
returnserverSocket;
//工作线程类
classHandlerimplementsRunnable{
privateSocketsocket;
UserStateus=null;
UsernewUser=null;
privateintuserId;
privateintuserState;
/**
*构造函数,从调用者那里取得socket
*@paramsocket指定的socket
*@authordream
*/
publicHandler(Socketsocket){
this.socket=socket;
*从指定的socket中得到输入流
*@return返回BufferedReader
privateBufferedReadergetReader(Socketsocket){
InputStreamis=null;
BufferedReaderbr=null;
is=socket.getInputStream();
br=newBufferedReader(newInputStreamReader(is));
returnbr;
publicvoidrun(){
try{
workThreadNum=workThreadNum+1;
System.out.println("
【第"
+workThreadNum+"
个的连接:
+socket.getInetAddress()+"
:
+socket.getPort()+"
BufferedReaderbr=getReader(socket);
Stringmeg=null;
StringBufferreport=newStringBuffer();
while((meg=br.readLine())!
report.append(meg);
if(meg.contains(csEndFlag)){
us=getReporterUserState(meg,socket);
synchronized(hashLock){
userStateList.put(userId,us);
}
}catch(IOExceptione){
【客户:
+newUser.getUser_id()+"
已经断开连接!
userStateList.remove(userId);
announceStateChange(userId,-1);
}finally{
if(socket!
=null){
//断开连接
socket.close();
}catch(IOExceptione){
e.printStackTrace();
privateUserStategetReporterUserState(Stringmeg,Socketsocket){
UserStateus=newUserState();
DocumentrequestDoc=DocumentHelper.parseText(meg);
newUser=ServerControler.parseXmlToUserState(requestDoc,socket);
userId=newUser.getUser_id();
userState=newUser.getUser_state();
us.setFlag
(2);
us.setUser_state(userState);
us.setUser_id(userId);
us.setUser_ip(newUser.getUser_ip());
us.setUser_port(newUser.getUser_port());
}catch(DocumentExceptione){
【来自客户端的信息不是一个合法的心跳包协议】"
returnus;
//扫描线程
classscanimplementsRunnable{
while(true){
*******"
+newDate()+"
:
扫描线程开始扫描"
+"
synchronized(hashLock){
if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 心跳 检测
![提示](https://static.bdocx.com/images/bang_tan.gif)