delphi的tserversocket控件如何接收16进制数
http://bbs.csdn.net/topics/390473005
对方客户端发送数据如:68 00 00··········;接收完成后,数据长度没错(13),但是显示接收结果时,只显示一个字母h(68的字符表示),后面一连串的都显示不出来了(00没有对应字符,问题应该是在这)。请问一下,我要怎么样才能完整把我接收到的数据显示出来呢
|
用户发来的应该不是字符串。
所有数据都可以看成是在内存中按字节保存的。 68 00 00 1A 2C 。 至于表示的是一个结构体,数字,字符这是你协议决定的。 接收时先创建一个数组缓冲区 buf:Array [0..1023] of Byte; 将数据保存到这个缓冲区中。 |
|
#2 得分:0回复于: 2013-05-28 15:03:13
Socket.ReceiveBuf() 可以读到内存里
|
|
|
#3 得分:0回复于: 2013-05-28 16:08:47
保存到缓冲区可以做到。但是怎么我取出缓冲区里面的内容都是空的呢,程序如下,请帮忙看看错在哪里
procedure TMAINFORM.TCPServer1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var iLength,I: Integer; iReceived: Integer; buff: array of byte; S:STRING; begin S:=''; iLength:= Socket.ReceiveLength; MEMO1.Lines.Add(INTTOSTR(ILENGTH)); while iLength>0 do begin SetLength(buff, iLength); iReceived := Socket.ReceiveBuf(buff[0], iLength); iLength := iLength - iReceived; end; FOR I:=0 TO iLength-1 DO BEGIN S:=S+INTTOSTR(BUFF[I]); END; MEMO1.Lines.Add(S); buff:= nil; end; |
|
#4 得分:40回复于: 2013-05-28 16:34:13
procedure TMAINFORM.TCPServer1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); var iLength,I,iStart, iRevCount: Integer; iReceived: Integer; buff: array of byte; S:STRING; begin S:=''; iStart := 0; iLength:= Socket.ReceiveLength; iRevCount := iLength; //这里加入的 SetLength(buff, iLength); MEMO1.Lines.Add(INTTOSTR(ILENGTH)); while iLength>0 do begin iReceived := Socket.ReceiveBuf(buff[iStart], iLength); //这里修改了注意 iStart := iStart + iReceived ; //这里加入的 iLength := iLength - iStart; end; //下面你的iLength 使用 iRevCount 替换了 FOR I:=0 TO iRevCount -1 DO BEGIN S:=S+INTTOSTR(BUFF[I]); END; MEMO1.Lines.Add(S); buff:= nil; end; |
|
|
#5 得分:0回复于: 2013-05-29 12:13:32
Delphi/Pascal code
这里有几个问题:接收时应该创建一个缓冲区,接收时PUSH,处理时POP。使用环形缓冲区。 |
|||
|
#6 得分:0回复于: 2013-05-29 16:52:38
接收问题4楼帮我解决了,谢谢四楼。现在又有个问题,为什么我发送数据时出现错误:list index out of bounds(0)?发送过程为:
procedure TMAINFORM.Button3Click(Sender: TObject); |
|
#7 得分:0回复于: 2013-05-29 16:55:46
还有,Socket.Connections[0]这句话中,[0]的作用是什么呢
|
|
#8 得分:0回复于: 2013-05-29 17:11:29
sendtext不符合规约要求,必须用Socket.Connections[i].SendBuf(buf,len),我再试试哈
|
|
#9 得分:0回复于: 2013-05-29 17:31:13
你要判断有多少个连接!如果没有连接那么 TCPServer1.Socket.Connections[0] 这个就会出现
你所说的错误! |
|
|
#10 得分:0回复于: 2013-05-30 10:29:53
发送数据帧时:TCPServer1.Socket.Connections[0].SendBUF(SDBUF,L);为什么只能从SDBUF[1]开始发送呢?如果要发送的数据是从SDBUF[0]开始的话,那我就会少发送了一个字节
|
|
#11 得分:0回复于: 2013-05-30 11:10:50
SDBUF 看你这个是怎么定义了! 是数组可以从0开始的
|
|
|
#12 得分:0回复于: 2013-05-31 10:42:59
谢谢,后来发现是我在定义SDBUF时,把他定义为ARRAY[1..100] OF byte了。谢谢楼上
|
delphi的tserversocket控件如何接收16进制数的更多相关文章
- 实战项目开发细节:C语言分离一个16进制数取出相应的位1或0
最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题. 其中,甄别好坏的方法是通过比如按键,或者其它的操作然 ...
- php 将16进制数串转换为二进制数据的函数
/** * 将16进制数串转换为二进制数据的函数 * @param $hexdata * @return string bindata */ function ...
- 汇编:1位16进制数到ASCII码转换
;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...
- Java中8进制数和16进制数的表示方法
由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题. 但,二进制数太长了.比如int 类型占用4个字节,32位.比如100,用int类型的二进制数表达将 ...
- C#一个16进制数用二进制数表示是几位?
1个字节是8位,二进制8位:xxxxxxxx 范围从00000000-11111111,表示0到255.一位16进制数(用二进制表示是xxxx) 最多只表示到15(即对应16进制的F),要表示到255 ...
- android 蓝牙编程重点---如何发送和接收16进制数据
最近的android蓝牙开发项目也逐渐接近尾声,基本的功能都已经完成,只剩下界面的设计.现在真的是舒了一口气! 作为编程学习经验只有1年的菜鸟,这是我独自完成的商业性产品,而且还是涉及到与单片机蓝牙模 ...
- MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算
1.编辑框添加变量,并选择变量类型为CString. 2. 使用“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算.
- 怎么用Python Flask模板jinja2在网页上打印显示16进制数?
问题:Python列表(或者字典等)数据本身是10进制,现在需要以16进制输出显示在网页上 解决: Python Flask框架中 模板jinja2的If 表达式和过滤器 假设我有一个字典index, ...
- python 整数转16进制数
def toHex(num): """ :type num: int :rtype: str """ chaDic = {: : : : : ...
随机推荐
- html之块级标签h系列,div
两个名词含义: 块级标签:内容再少也会占满整行 内联标签:有多少内容点多少地方 注:块级标签和内联不签不是绝对的,可以通过CSS作任意转换 1.h1-h6 :块级标签 请仅仅把标题标签用作标题文本,如 ...
- sqlplus将查询结果重定向到文件,不输出到屏幕
--每行的字符数目 --该参数设置每页输出的行数.n=0表示不产生新页 --显示和拷贝long类型值的最大宽度的设置,最大值2G --sqlplus检索long类型值的增量大小.由于内存的限制 可按增 ...
- CSS 使用小结
1.文字过长显示省略号(....) white-space: nowrap;overflow: hidden;text-overflow: ellipsis; 2.获取当前的ID : <asp ...
- Redis 实现高效不遗漏的事件封装
虽然Redis有订阅功能,但是订阅功能是实时的,过了这个点,就接收不到消息了. 同时,如果订阅的客户端因为某些特殊原因shutdown了,那也就找不回未处理完整的订阅事件了. 但好在,Redis还有一 ...
- nova分析(7)—— nova-scheduler
Nova-Scheduler主要完成虚拟机实例的调度分配任务,创建虚拟机时,虚拟机该调度到哪台物理机上,迁移时若没有指定主机,也需要经过scheduler.资源调度是云平台中的一个很关键问题,如何做到 ...
- php.ini xdebug
[XDebug]zend_extension = "C:\xampp\php\ext\php_xdebug.dll"xdebug.profiler_append = 0xdebug ...
- CSS position, z-index
position 1.fixed:定位.浮动.(需要搭配left, right) 2.absolute:相对于最近的父元素,不考虑周围的布局.(可使用z-index占据位置,则同一位置层叠) 3.re ...
- bzoj4637: 期望
Description 在米国有一所大学,名叫万国歌剧与信息大学(UniversalOperaandInformaticasUniversity).简称UOI大学.UO I大学的建筑与道路分布很有趣, ...
- erlang远程加载模块须知
erlang加载本地beam到远程节点,需要把依赖库一个个手动加载,否则他不会自动加载. 另外,创建lib的话,使用 rebar-creator create-lib
- HDMI接口与协议
深入了解HDMI接口 一.HDMI接口的工作原理这张图是HDMI接口的架构示意图.从左边的信号源中你可以看到,HDMI接口的信源可以是任何支持HDMI输出的设备,而接入端也可以是任何带有HDMI输 入 ...