博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web项目中加入socket(加强版)
阅读量:7235 次
发布时间:2019-06-29

本文共 8968 字,大约阅读时间需要 29 分钟。

hot3.png

长连接:

package com.sichang.util;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.StringTokenizer;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.sichang.dao.DBBase;import com.sichang.dao.DBService;public class Server_Socket2 {		static DBService db = DBBase.getInstance();// 实例化dao	static Responseutil responseutil = new Responseutil();		public void startSocketService()	{		ServerSocket serverSocket = null;				while(true)		{	        try	        {	        	if(serverSocket == null)				{	        		serverSocket = new ServerSocket(9090);				}	        	else	        	{		        	Socket socket = serverSocket.accept();                        //主线程获取客户端连接		            Thread workThread = new Thread(new Handler(socket));    //创建线程		            workThread.start();                                    //启动线程	        	}	        }	        catch(Exception e)	        {	            e.printStackTrace();	        }		}	}		class Handler implements Runnable	{	    private Socket socket;		    public Handler(Socket socket)	    {	        this.socket=socket;	    }	    	    @SuppressWarnings("unchecked")		public void run()	    {	    	try	        {		    	while(socket.isConnected())		    	{			    	BufferedReader br = null;					PrintWriter pw = null;						            System.out.println("新连接:"+socket.getInetAddress()+":"+socket.getPort());		            socket.setSoTimeout(5000);					InputStream in = socket.getInputStream();					InputStreamReader is = new InputStreamReader(in);					br = new BufferedReader(is);					String info = br.readLine();					System.out.println("9090:" + info);					String SwitchState = "";										if (info != null) 					{						// 行车轨迹						if (info.contains("pathHistory"))						{							// 处理传递过来的字符串							List
 list = String2List(info);         // 调用插入行车轨迹方法         insertPathHistory(list); /********************查询开关状态数据给设备***********************/         String IMSI = Responseutil.beEqual(list.get(1).toString());          String selectSwitchStateOK = db.selectSwitchState(IMSI).toString(); SwitchState = JSONResolveArray(getRowsData(selectSwitchStateOK), "#"); } // 心跳包 if (info.contains("Tick")) { /********************查询开关状态数据给设备***********************/ // 处理传递过来的字符串 List
 list = String2List(info);                  String IMSI = Responseutil.beEqual(list.get(1).toString()); String selectSwitchStateOK = db.selectSwitchState(IMSI).toString(); SwitchState = JSONResolveArray(getRowsData(selectSwitchStateOK), "#"); } // 设备注册 if (info.contains("deviceRegister")) { // 处理传递过来的字符串 List
 list = String2List(info);         SwitchState = deviceRegister(list); } OutputStream out = socket.getOutputStream(); pw = new PrintWriter(out); pw.print(SwitchState);// pw.print("\n"); pw.flush(); } else { break; } // 关闭// in.close();// is.close();// br.close();// // out.close();// pw.close(); Thread.sleep(100);         }     }      catch(Exception e)      {          e.printStackTrace();         }      finally      {      if(socket.isClosed() == false)      {      try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }      }      }     } } /**  * 去掉= 等于号前面的数据  * @param data  * @return  * @throws Exception  */ public static String beEqual(String data){ String dest = ""; Pattern p = Pattern.compile(".*="); Matcher m = p.matcher(data); dest = m.replaceAll(""); //System.out.println("处理后的字符="+dest); return dest; } // 将字符串转换为list @SuppressWarnings("rawtypes") public static List String2List(String info){ // 处理传递过来的字符串 List
 list=new ArrayList
();        StringTokenizer st=new StringTokenizer(info,"&");        while(st.hasMoreTokens()){         list.add(st.nextToken());        } return list; } // 解析JSON数组2 public static String JSONResolveArray(String ResponseStr, String divideStr) { String returnArrayStr = ""; JSONArray arr = null; try { arr = new JSONArray(ResponseStr); for (int i = 0; i < arr.length(); i++) { JSONArray temp = (JSONArray) arr.get(i); // if (!temp.getString(i).equals("")) // { for (int j = 0; j < temp.length(); j++) { returnArrayStr += temp.getString(j) + divideStr; } // } } } catch (Exception e) { e.printStackTrace(); } return returnArrayStr; } // 设备注册 @SuppressWarnings("rawtypes") public static String deviceRegister(List list){ String SwitchState="";        String IMSI = Responseutil.beEqual(list.get(1).toString()); String selectDeadlineOK = db.selectDeadline(IMSI).toString(); if(getResultData(selectDeadlineOK).equals("OK")){ String Deadline = JSONResolveArray(getRowsData(selectDeadlineOK),""); if(Deadline.equals("null") || "".equals(Deadline)){ // 开始初始化 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String created = df.format(new Date()); String updatesim_idOk = db.updatesim_id(IMSI, created,"12").toString();// 初始化 if(getResultData(updatesim_idOk).equals("OK")){ // 这里还要添加亲情号码  FamilyNumber SwitchState=responseutil.getServiceInfo()+"#"+familyNumber(IMSI)+"#"; }else{ System.out.println("初始化失败"); } }else{ // 查询出IMSI信息发送给客户端 SwitchState=responseutil.getServiceInfo()+"#"+familyNumber(IMSI)+"#"; } }else{ System.out.println(selectDeadlineOK); } return SwitchState; } // 获取亲情号码 public static String familyNumber(String IMSI){ String familyNumber = ""; String familyNumberOK = db.familyNumber(IMSI).toString(); if(getResultData(familyNumberOK).equals("OK")){ familyNumber = JSONResolveArray(getRowsData(familyNumberOK),""); if (familyNumber.length()<1) { familyNumber = "null"; } }else { } return familyNumber; } // 插入数据库 @SuppressWarnings("rawtypes") public static void insertPathHistory(List list){ String IMSI = Responseutil.beEqual(list.get(1).toString());         String sendTime = Responseutil.beEqual(list.get(2).toString()).replaceAll("T"," "); String tableName = "Z_"+Responseutil.tailTime(sendTime); String positions = Responseutil.beEqual(list.get(3).toString()); String speed = Responseutil.beEqual(list.get(4).toString()); System.out.println("IMSI  "+IMSI); System.out.println("sendTime  "+sendTime); System.out.println("tableName   "+tableName); System.out.println("positions"+  positions); System.out.println("speed  "+speed); // 判断数据库表是否存在,如果有,则插入,如果没有,则创建 if(judgeTable(tableName)){ // 插入数据库 db.insertThatDayTable(tableName, IMSI, sendTime, courseData(positions), speed).toString(); }else{ // 创建数据库并插入数据 String createTableOK = db.createTable(tableName).toString(); if(getResultData(createTableOK).equals("OK")){ //System.out.println("创建成功,开始插入"); db.insertThatDayTable(tableName, IMSI, sendTime, courseData(positions), speed).toString(); }else{ System.out.println("创建失败:"+createTableOK); } } } // 取出result节点的值的方法 public static String getResultData(String data) { // 开始取出result节点的数据 JSONObject jsonderice; Object dericeObject = null; try { jsonderice = new JSONObject(data); dericeObject = jsonderice.get("result"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dericeObject.toString(); } // 判断数据库表是否存在 public static boolean judgeTable(String date){ String JudgeTableOK = db.JudgeTable(date).toString(); System.out.println("JudgeTableOK     "+JudgeTableOK); String rowsdata = JSONResolveArray(getRowsData(JudgeTableOK), ""); System.out.println(rowsdata); if("".equals(rowsdata)){ // 没有表 return false; }else{ // 有表 return true; } } // 处理上传上来的经纬度数据2 public static String courseData(String positions){ String str=""; String[] positionS=positions.split("\\/"); for (int i = 0; i < positionS.length; i++) { String[] positionSs = positionS[i].split(","); str +=Responseutil.BigDeci(Double.parseDouble(positionSs[0]))+","+Responseutil.BigDeci(Double.parseDouble(positionSs[1]))+"|"; } // System.out.println("处理过精度的轨迹:"+str); return str; } // 取出rows节点的值的方法 public static String getRowsData(String data) { JSONObject jsobj; Object pesObj = null; try { jsobj = new JSONObject(data); pesObj = jsobj.get("rows"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return pesObj.toString(); }}

转载于:https://my.oschina.net/hehongbo/blog/494954

你可能感兴趣的文章
数据库(二)
查看>>
数组各元素随机赋值、求和、求平均值、求最大值的各类测试(一维数组)
查看>>
Linux学习之分区自动挂载与fstab文件修复(九)
查看>>
用Javascript获取页面元素的位置(转)
查看>>
matlab实现MCMC的马尔可夫切换ARMA - GARCH模型估计
查看>>
面向对象程序设计 总结作业
查看>>
django总结-从socket到实战的概略
查看>>
【转载】复制文件到已存在的Jar
查看>>
Sublime Text3常用插件以及安装方法(实用)
查看>>
javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-Service.xml
查看>>
基本数据类型(int,bool,str)
查看>>
从内而外
查看>>
Unity 一个简单的鼠标跟随
查看>>
vim下go开发配置
查看>>
JVM中的堆与栈的异同点.
查看>>
树莓派raspberry pi配置
查看>>
dnn安全控制类库过滤html、js、sql等防范xss攻击及sql攻击
查看>>
2-angular.bootstrap
查看>>
浅谈PHP数据结构之栈
查看>>
Moving Tables-贪心
查看>>