使用 TIdTcpServer 和 TIdTcpClient 数据通信 问题???
需求:
报文格式:数据包头 + 数据包体(数据包头的内容是不包含包头的整个数据包长度)。 |------------------|----------------| |数据包头(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 |金额 ||------|-----------|------------|--------|---------|--------|--------|----------------------|
还望各位大神不吝赐教!!谢谢大家!
分不是很多,这是最大分值!如果需要可以继续开帖!
[解决办法]
建几个自定义包就行了。
每个不同的信息建独立包。
一个主包,也就是每次发送的包,这个包有2个值,一个是包的类型,一个就是上面的信息包,服务器收到包后,先读取包类型,然后做个case 解读包信息就行了,返回也是如此。
[解决办法]
建议看一下INDY的DEMO,里面有个CHAT的DEMO,比较详细,不过他的客户端好像没用多线程
[解决办法]
用记录类型就行了