* 检查发送前的连接是否正常 * 无论如何,对于银行发起的交易,应该断开连接 * 接受套接字上的报文信息 // * 如果非debug模式下,那么关闭连接(因为不需要应答)
* 农产品发起交易时用到的通信类 * 从池中取出一个socket对象 * 与银行服务器进行连接 * 在套接字上发送一个报文 * 在套接字上接受发送后,银行返回的报文的信息 * 因为是农产品发起的交易,没有收到数据,所以状态未明确 * 如果出现接受的报文,不是发送报文所对应的报文应该报错,从此位置开始报文接受工作已经全部 完成 * 通过报文工厂创建报文
我在做接口的时候做报文解析,接收到报文后读取报文头里的长度后,根据报文头分段接收报文,如果报文小于13000多时可以正常读取,但是报文长度大于这个值时,调用in.read();读到13000多时返回的是-1,报文总是接收不全,[color=red]请问是发送方发的不全,还是我本地接收有问题[/color]
0 1 2 3 4 5 6
0 1 2 3
| 十六位源端口号 | 十六位目标端口号 |
| 三十二位序列号 |
| 三十二位确认号 |
| 四位 | |U|A|P|R|S|F| |
| 首部 |六位保留位 |R|C|S|S|Y|I| 十六位窗口大小 |
| 长度 | |G|K|H|T|N|N| |
| 十六位校验和 | 十六位紧急指针 |
| 选项(若有) |
| 数据(若有) |
TCP首部结构
0 1 2 3
| 版本 | 长度 | 八位服务类型 | 十六位总长度 |
| 十六位标识 | 标志| 十三位片偏移 |
| 八位生存时间 | 八位协议 | 十六位首部校验和 |
| 三十二位源IP地址 |
| 三十二位目的IP地址 |
| 选项(若有) |
| 数据 |
IP首部结构
| IP首部 | TCP首部 | TCP数据段 |