如何使用java实现104规约通讯

weixin_39338071 2017-06-28 03:46:55
如何使用java实现104规约通讯,发我邮箱源码 296478342@qq.com
...全文
1275 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有代码发我一份,项目
guishuanglin 2019-07-12
  • 打赏
  • 举报
回复

//流程名称
	public static final String FLOW_NAME 		= "对时流程";
	//流程常量
	public static final String FLOW_ZZQQ 		= "对时命令";
	public static final String FLOW_QRBW 		= "对时确认";
	
	/**
	 * 发送:子站发送对时确认报文
	 */
	public boolean sendZhQyFrame(TcpVarFrame dsFrame) {
		boolean b = false;
		try {
			LinkedBlockingQueue<TcpFrame> senQueue = EmsToBJXNYTcpClient.getSenQueue();
			TcpVarFrame frame = this.getZhQyFrame(dsFrame);
			if(frame != null) {
				senQueue.put(frame);
				b = true;
				
				//设置当前流程步骤,因为流程已经没有下一步,所以流程置空
				EmsToBJXNYTcpClient.setFrameFlow(null);
			}
			senQueue = null;
		}catch (Exception e) {
			logger.error(" 发送["+FLOW_QRBW+"]异常.", e);
		} finally {

		}
		return b;
	}
发送报文的是采用, 发送队列来执行的, 只要把组装好的报文放进队列就可以了. 虽然不是什么重点项目, 但是代码还是要保密, 所以只发个片段供参考.
guishuanglin 2019-07-12
  • 打赏
  • 举报
回复
我上个月做了一个很小的104项目, 包括发送, 接收, 心跳, 登录 报文包括: 实时数据召唤流程, 冻结数据召唤流程. 全部是自己写的, 没有用任何框架.

//组装:子站发送对时确认报文
	public TcpVarFrame getZhQyFrame(TcpVarFrame dsFrame) {
		TcpVarFrame frame = new TcpVarFrame();
		frame.setFlowName(FLOW_NAME);
		frame.setFrameName(FLOW_QRBW);
		//
		String addr1 = EmsToBJXNYTcpClient.getAddrA1();
		String addr2 = EmsToBJXNYTcpClient.getAddrA2();
		
		//按转送顺序组装
		StringBuffer bf = new StringBuffer(128);
		bf.append("68");
		String hexL = StaticConvert.getBJXNYHexLenByIntL(17);//L=17字节
		bf.append(hexL);
		bf.append(hexL);
		bf.append("68");
		//控制域
		bf.append("48");
		bf.append(addr1 +addr2);
		bf.append(dsFrame.getAsduTypeHex());
		bf.append(dsFrame.getAsduVsqHex());
		//
		bf.append("07");
		bf.append(addr2);
		//对时的时间
		Date dayDate1 = DateUtils.parse(new Date(), DateUtils.SECOND);
		bf.append(StaticConvert.getBJXNYHexStrByDate(dayDate1));
		//
		//校验和CS(1 字节) 
		byte[] byteBuf = StaticConvert.parseHexStr2Byte(bf.toString());
		bf.append(StaticConvert.getBJXNYHexCsByInt(byteBuf, 6, byteBuf.length));
		
		bf.append("16");
		
		boolean b = frame.setFrameDataHex(bf.toString());
		return b? frame : null;
	}
迷途的码农 2019-07-12
  • 打赏
  • 举报
回复
使用netty4.0框架
  • 打赏
  • 举报
回复
解决了吗?急求
大写的老王 2017-12-18
  • 打赏
  • 举报
回复
楼主解决了没

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧