当前位置:首页 > 代码 > 正文

delphi用udp的源代码(delphi udp控件)

admin 发布:2022-12-19 19:34 137


今天给各位分享delphi用udp的源代码的知识,其中也会对delphi udp控件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

delphi UDP 怎么发送中文

建议全部使用AnsiString操作,应该就不会有问题了...

procedure TForm1.SpeedButton1Click(Sender: TObject);

var

Sendrec : TSendrec;

SendStr : AnsiString;

begin

if RichEdit2.Text '' then

begin

Sendrec.i := MAXDWORD;

Sendrec.j := MaxInt;

ZeroMemory(@Sendrec.Str, SizeOf(Sendrec.Str));

SendStr := AnsiString(Trim(RichEdit2.Text));

CopyMemory(@Sendrec.Str, PAnsiChar(SendStr), Length(SendStr));

RichEdit1.Lines.Add('你 ' + Myt);

RichEdit1.Lines.Add(Sendrec.str);

IdUDPServer1.SendBuffer(Edit1.Text, cPort, RawToBytes(Sendrec.Str, SizeOf(Sendrec.Str)));

RichEdit2.Clear;

Sendrec.Str := '';

end

else StatusBar1.Panels[0].Text := '发送消息不能为空';

end;

delphi 用UDP发送文件流

一样的!注意Position=0就行了。具体比较复杂的,UDP发送文件或者流涉及到失败编码,也就是说UDP是不稳定的协议,如果距离比较远,是会发送失败的,每一次都检测是很浪费时间的,所以要自己定义一个结构检测每个流片段的md5值是否和接收到的一致,发送第一遍后检测失败的段,让发送端重发,直到所有段的md5值都一致就可以组装成一个流了,有兴趣的话可以卖给你

我用delphi设计了udp传输~但是服务器收到的我发东西都是 ascii码~如何解决呢

这个问题,不是解答过了么?还给你写了一个简洁的,正确的接收函数。

你这个服务器代码,中没有弄清楚数组,字符串及其下标的关系。数组下标一般是从0开始的,string的下标是从1开始的。还有pchar类型的话,如果要是字符串的话,还需要以0为结束,来确定字符串的内容。

所以代码中,copy函数,第一个参数是string的时候,第二个参数,应该从1开始,表示从第一个字符开始。

还有使用动态数组在这里是多余的,直接使用string就可以了。

在edit中你写的FF等,都是以字符串发送的,对方收到的当然也是字符串'FF'

delphi 使用UDP发送结构体问题

SendStruct = record

ASize: Integer;

Name: array[0..0] of ansichar;

end;

你这样定义结构后,你就不能用new来分配内存了,因为用new长度就算不对了,所以要用getmem,自己算要分配的长度。比如下面:

var p:PSendStruct;

s:string;

len:Integer;

begin

s:='hello';

len:=sizeof(TSendStruct)+length(s);

getMem(p,len);

FillChar(p^,len,0);

p^.ASize:=len;

move(s[1],p^.Name,length(s));

//self.Caption:=pchar(@p^.Name);

IdUDPClient1.SendBuffer(p^, len);

freeMem(p);

end;

接收的时候类似,也用getmem分配。udp发送的数据包大小是有限制的(好象1024字节),所以如果你的数据包大过这个限制,你还得自己分包。

另外,定义网络发送的结构,最好加上packed关键字,结构会小不少。比如:

SendStruct =packed record

ASize: Integer;

Name: array[0..0] of ansichar;

end;

delphi udp传输问题

这个就是一个UDP接收数据的过程,接收到的数据在一个注tStream中,然后从流中取出数据,告示到Memo1中。

代码中setlength(fd,adata.Size);是用来设置一个缓冲区的大小,也就是为这个动态数组分配空间。大小与接收到的数据大小相同。

adata.ReadBuffer(fd[0],adata.Size);就是从流中读取数据到缓冲区中,

其实这个写的比较啰嗦。可以简化一点。

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

var

s : string;

begin

try

setlength(s, adata.Size); // 为字符串分配空间

adata.ReadBuffer(s[1],adata.Size); // 读取字符串实际内容

memo1.Lines.Add('消息来自于['+abinding.PeerIP+']['+abinding.ip+']:'+ s);

except

memo1.Lines.Add('接收数据失败');

end;

delphi 中UDP 通讯问题。请高手指教!急!!!

SendBuffer参数错了(你的用法是Indy9的,但后来的Delphi自带的是Indy10)

另外,TBytes是个数组,没有read的方法

delphi用udp的源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于delphi udp控件、delphi用udp的源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/20706.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载