【TCP/IP 11】一个基于TCP协议的Socket通信实例

一、前言

一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度。正好前段时间完成了一个socket的接口的对接需求,现将实现的思路做一个整理。

二、需求概述

1、需要提供一个socket服务端,实时接收三方传递过来的数据

2、实时报文规范说明

3、通讯及接口格式说明

通讯方式:

通讯采用 TCP 协议, SOCKET 同步短连接方式。

报文结构:

报文为不定长报文,以定长报文头+不定长报文体的方式

报文基本结构如下图所示:

6位交易报文长度+交易报文。其中 6 位交易报文长度以 ASCII 码字符串方式表示(6 个字节),右对齐,左补 0,不包括自身的长度,表示的是报文体的长度。如“000036fbced3fe-7025-4b5c-9cef-2421cd981f39”, 000036 为长度,“fbced3fe-7025-4b5c-9cef-2421cd981f39”为报文内容。

报文结构符合 XML 标准的报文格式,报文以无 BOM 格式的 GBK 编码。报文根节点为 Transaction节点。除非报文里有特殊说明,报文定义的字段都是 Transaction 节点的子节点。报文格式参考下节示例。

此文的重点在于说明,用socket传递数据时,报文的基本机构通常包含【定长的报文头+不定长的报文体】

4、报文示例

请求:

000410<?xml version="1.0" encoding="GBK"?><req:request xmlns:req="http://chimera.intele.com/gw/xsd/SMSGateway/Request/2013/02"><serviceId>29</serviceId><username>gre</username><password>erg</password><message><recipient>+4741414141</recipient><content>test</content><price>0</price><settings><sendWindow><startDate>2018-06-15</startDate><startTime>16:15:00</startTime></sendWindow></settings></message></req:request>

响应:

000683<?xml version="1.0" encoding="GBK"?><rsl:result xmlns:rsl=http://chimera.intele.com/gw/xsd/TCPGateway/Result/2015/10 xmlns:sms=http://chimera.intele.com/gw/xsd/SMSGateway/Response/2013/02 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><status><code>1</code><deion>OK</deion></status><sms:response><batchReference>0c2c002f-ccc6-4c7b-86e1-c7871b1c98b3</batchReference><messageStatus><statusCode>1</statusCode><statusMessage>Message enqueued for sending</statusMessage><clientReference>SMS-AFFS-000000100</clientReference><recipient>+4741915590</recipient><messageId>6y06b02hdo00</messageId><sequenceIndex>1</sequenceIndex></messageStatus></sms:response></rsl:result>

往期精彩内容:

Java知识体系总结(2021版)

Java多线程基础知识总结(绝对经典)

超详细的springBoot学习笔记

常见数据结构与算法整理总结

Java设计模式:23种设计模式全面解析(超级详细)

Java面试题总结(附答案)

转载自:https://www.sohu.com/a/259845146_575744

猜你喜欢

转载自blog.csdn.net/guorui_java/article/details/114645601