别人规定了socket发送报文报文的结构我怎么按照这个结构发报文

 * 检查发送前的连接是否正常
 * 无论如何,对于银行发起的交易,应该断开连接
 * 接受套接字上的报文信息
 // * 如果非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数据段   |

我要回帖

更多关于 socket报文 的文章

 

随机推荐