IdUDPServer问题,请高手指点!

renqingan 2007-08-22 04:54:22
我用delphi7做的UDP通讯,代码如下:
发送端用IdUDPClient,代码如下:
procedure SendInformation(DataByte:TArrayType);
var len,i:integer;
lsSendBuff: array[0..39] of byte;
begin
len:=High(DataByte)+1;
for i:=0 to len-1 do lsSendBuff[i]:=DataByte[i];
FormMain.IdUDPClient1.SendBuffer(lsSendBuff,len);
End;
接收端用IdUDPServer,代码如下:
procedure TFormMain.IdUDPServer1UDPRead(Sender: TObject; AData:TStream;
ABinding: TIdSocketHandle);
var
lsRevBuff:array[0..39] of byte;
Len: integer;
begin
//从流中读取数据到临时缓冲区
Len:=AData.Size;
if len<>40 then exit;
AData.ReadBuffer(lsRevBuff,Len);
end;
如果按上述方法发送能正确接收,如果将发送端改成下列代码,接收端就不能正确接收,请指点,谢谢!
procedure SendInformation(DataByte:TArrayType);
var len:integer;
begin
len:=High(DataByte)+1;
FormMain.IdUDPClient1.SendBuffer(DataByte,len);
End;
...全文
137 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
国风 2007-09-06
  • 打赏
  • 举报
回复
试试这样写
procedure SendInformation(DataByte:TArrayType);
var len:integer;
begin
len:=High(DataByte)+1;
FormMain.IdUDPClient1.SendBuffer(DataByte[0],len);
End;
renqingan 2007-08-31
  • 打赏
  • 举报
回复
dinglinger,谢谢,明白了!
小呆之家 2007-08-30
  • 打赏
  • 举报
回复
发送端用IdUDPClient,代码如下:
procedure SendInformation(DataByte:TArrayType);
var len,i:integer;
lsSendBuff: array[0..39] of byte;
begin
len:=High(DataByte)+1; //这一句是多余的。
for i:=0 to high(DataByte){len-1} do
lsSendBuff[i]:=DataByte[i];
FormMain.IdUDPClient1.SendBuffer(lsSendBuff,len);
End;


IdUDPClient1.SendBuffer(var abuffer;const abyteCount:integer);
自己仔细看看为个发送方法的原型吧。
第一个参数是一个引用类型的无类型参数,也就是说是一个引用类型的指针;


procedure SendInformation(DataByte:TArrayType);
var len:integer;
begin
len:=High(DataByte)+1;
FormMain.IdUDPClient1.SendBuffer(DataByte,len);
End;
在这个方法中,DataByte是一个“常参”也就是说,他是一个无法改变的指针,你以这种方式发送数据,能发成功?
编译器应当提示数据类型不正确才是啊。
就算你这样发送可以操作,你也无法发送LEN个字节,最多也就发送了一个字节而已,这条指令对于你的系统来说,就是
非法指令,能有回应么?
renqingan 2007-08-29
  • 打赏
  • 举报
回复
我用的是INDY9.0
笨笨菜 2007-08-28
  • 打赏
  • 举报
回复
DataByte[0]试试
renqingan 2007-08-24
  • 打赏
  • 举报
回复
DoorKey 2007-08-24
  • 打赏
  • 举报
回复
请问你用的INDY的版本是多少??不同的版本的SendBuffer的参数类型是不一样的.
或者你直接贴出SendBuffer的定义.
renqingan 2007-08-23
  • 打赏
  • 举报
回复
brightyang
首先感谢你!

DataByte的类型为:
type
TArrayType=array of Byte;

SetLength(DataByte,40);
它作为一个参数,长度为40,调用SendInformation(DataByte:TArrayType之前已为它的每个单元赋值。
如果将DataByte定义为:DataByte:Array[0..40) Of Byte,收发的数据才一样。
brightyang 2007-08-22
  • 打赏
  • 举报
回复
len:=High(DataByte)+1;
FormMain.IdUDPClient1.SendBuffer(DataByte,len);


DataByte的数据呢

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧