首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

使用 TIdTcpServer 和 TIdTcpClient 数据通信 有关问题?

2012-07-31 
使用 TIdTcpServer 和 TIdTcpClient 数据通信问题???需求:SQL code报文格式:数据包头 + 数据包体(数据包头

使用 TIdTcpServer 和 TIdTcpClient 数据通信 问题???
需求:

SQL code
报文格式:数据包头 + 数据包体(数据包头的内容是不包含包头的整个数据包长度)。    |------------------|----------------|    |数据包头(56字节)|    数据包体    |    |------------------|----------------|    |   Data Header    |  Data Body     |    |------------------|----------------|所有非数字字段左对齐,右补空格;金额右对齐,左补空格,精确到分。报文体长度=56+数据包体长度。报文编号:ABCDEF001;报文头格式:|------|-----------|--------|--------|--------|------------|-------------------||序号  |   名称    |  类型  |  长度  |  对齐  |  填充字符  |    说明          ||------|-----------|--------|--------|--------|------------|-------------------||  1   |报文体长度 |  数值  |   6    |  Left  |    空格    |   报文体长度      ||------|-----------|--------|--------|--------|------------|-------------------||  2   |交易码     |  字符  |   6    |  Left  |    空格    |   交易码          ||------|-----------|--------|--------|--------|------------|-------------------||  3   |返回码     |  字符  |   4    |  Left  |    空格    |   返回码          ||------|-----------|--------|--------|--------|------------|-------------------||  4   |返回信息   |  字符  |   40   |  Left  |    空格    |   返回信息        ||------|-----------|--------|--------|--------|------------|-------------------|交易返回码定义:   0000 交易成功   1001 无用户号码   9000 系统暂停服务   9999 其它原因   报文内容(数据包体)格式 如:查询请求报文   报文编号:ABCDEF002;报文格式:|------|-----------|------------|--------|---------|--------|--------|----------------------|| 序号 |   名称    |    说明    |  类型  |   长度  |  精度  |  输入  |         备注         ||------|-----------|------------|--------|---------|--------|--------|----------------------||  1   |USERID     |  用户编码  |Varchar |    20   |        |   Y    |缴费用户编码          ||------|-----------|------------|--------|---------|--------|--------|----------------------||  2   |DATE       |  交易日期  |Varchar |     8   |        |   N    |YYYYMMDD(系统日期)  ||------|-----------|------------|--------|---------|--------|--------|----------------------||  3   |TERM       |  交费种类  |Char    |     3   |        |   Y    |101(默认值)         ||------|-----------|------------|--------|---------|--------|--------|----------------------|  查询应答报文(系统应答数据)   报文编号:ABCDEF003;报文格式:|------|-----------|------------|--------|---------|--------|--------|----------------------|| 序号 |   名称    |    说明    |  类型  |   长度  |  精度  |  输入  |         备注         ||------|-----------|------------|--------|---------|--------|--------|----------------------||  1   |USERID     |  用户编码  |Varchar |    20   |        |   N    |缴费用户编码          ||------|-----------|------------|--------|---------|--------|--------|----------------------||  2   |DATE       |  交易日期  |Varchar |     8   |        |   N    |YYYYMMDD(系统日期)  ||------|-----------|------------|--------|---------|--------|--------|----------------------||  3   |TERM       |  交费种类  |Char    |     3   |        |   N    |101(默认值)         ||------|-----------|------------|--------|---------|--------|--------|----------------------||  4   |CustName   |  客户名称  |Varchar |    40   |        |   N     |客户姓名              ||------|-----------|------------|--------|---------|--------|--------|----------------------||  5   |CustAddr   |  客户地址  |Varchar |   100   |        |   N    |客户地址              ||------|-----------|------------|--------|---------|--------|--------|----------------------||  6   |Money      |  金额      |Numeric |    18   |   2    |   N    |金额                  ||------|-----------|------------|--------|---------|--------|--------|----------------------|



环境:
  开发工具:Delphi7
  使用控件:TIdTcpServer 和 TIdTcpClient
  数据库:SQL2005

报文的格式数据即SQL数据表,在客户端通过请求报文向服务器发送,服务器根据请求报文的信息反馈相应的结果到客户端。

问题:
  1.使用 TIdTcpServer 和 TIdTcpClient 能发送报文数据吗?如果不行的话,那请问用什么控件好点!
  2.能发送的话,数据包头和数据包体的格式可以使用 Delphi 的 Record 来定义吗?
  3.怎么在客户端和服务器之间传递数据包头和数据包体?


小弟之前都是做数据库开发的,现在接了个任务需要做网络通讯方面的,由于没接触过,也不知道从何下手!现在也就能使用 TIdTcpServer 和 TIdTcpClient 传递字符串!



还望各位大神不吝赐教!!谢谢大家!

分不是很多,这是最大分值!如果需要可以继续开帖!


[解决办法]
建几个自定义包就行了。
每个不同的信息建独立包。
一个主包,也就是每次发送的包,这个包有2个值,一个是包的类型,一个就是上面的信息包,服务器收到包后,先读取包类型,然后做个case 解读包信息就行了,返回也是如此。
[解决办法]
建议看一下INDY的DEMO,里面有个CHAT的DEMO,比较详细,不过他的客户端好像没用多线程
[解决办法]
用记录类型就行了

热点排行