使用 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,比较详细,不过他的客户端好像没用多线程
[解决办法]
用记录类型就行了