用ClientSocket接收Server端发出的字节类型的数据包.(50分)

  • 主题发起人 主题发起人 jordan7877
  • 开始时间 开始时间
J

jordan7877

Unregistered / Unconfirmed
GUEST, unregistred user!
我是一Delphi菜鸟,现工作中遇到如下问题,望速解决.
Server端已有一发送字节类型的数据包程序.
我用ClientSocket接收,在连接正确的情况下,我使用ReceiveBuf进行接收,
不知什么原因,我的接收指针(字节型指针)所指的地址值总是0.
另外,如果接收正确后,怎样把指针所指地址中的值付给一个字节类型的数组呢?
望各位大侠指点迷津,最好给出原码.
 
1,仔细检查指针操作的代码。
2,操作指针所指的内容,其实就跟操作PCHAR类型的变量一样的,你可以使用很多方法,
比如:把PCHAR变成STRING,然后把STRING内容送入字符数组。
或者,使用DELPHI提供的函数,将字符COPY到数组中。
总之,根据我的经验,一下子就搞定不太可能,总要迂回一下。
祝顺利。
 
那说明你收的有问题了,你具体是用什么方式发送数据的,是NON—BLOCKING还是BLOCKING啊?
 
以前的贴子中对这个问题有过详细论述,我印象很深刻
就是接收方式的问题
 
agree with bigroom.
给你一个我的例子:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
C: array [1..6] of Char;
I: Integer;
s:string;
begin

if NumberBytes <= 6 then
begin
NMUDP1.ReadBuffer(c, I);
s:=copy(c,1,i); //一定要截取实际的长度,否则接受的字符会出错!!
Memo1.Lines.Add(s+': received '+IntToStr(I)+' bytes from '+FromIP+' on port '+IntToStr(Port));
end
else
Memo1.Lines.Add(IntToStr(I)+' bytes incoming, buffer too small');
end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
829
SUNSTONE的Delphi笔记
S
S
回复
0
查看
788
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
后退
顶部