用NMUDP控件怎么发送一个结构体数据出去? (10分)

  • 主题发起人 主题发起人 RoninHao
  • 开始时间 开始时间
R

RoninHao

Unregistered / Unconfirmed
GUEST, unregistred user!
最好能给个例子,几行代码,谢谢!
还有什么别的好一点的UDP控件么,麻烦介绍一下
 
struc=racord
i:integer;
end;
asa:struc;
sendbuf(asa,sizeof(struc));
 
方法1,用SendStream:

Type
TDataFormat = packed record
Head:Byte;
SerNumber:Byte;
StreamLen:array[0..1] of byte;
stream:array [0..512] of char;
end;
var
MyStream: TMemoryStream;
Tmpstr1:TDataFormat;
...
with TmpStr do
begin
Head:=$30;
SerNumber:=FrameSeq+1;
streamlen[0]:=0;
StreamLen[1]:=Length(str);
for i:=0 to Length(str)-1 do
Stream:=(str[i+1]);
end;
MyStream:=TMemoryStream.Create;
try
MyStream.Write(TmpStr, sizeof(TDataFormat));
LoginUDP.SendStream(Mystream);
finally
MyStream.Free;
end;

方法2,用SendBuf:

Type
pData= ^TDataFormat;
TDataFormat=packed record
a:Byte;
b:Byte;
c:array[0..1] of byte;
d:array [0..511] of char;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
buf: ^byte;
pd: pData;
begin
GetMem(buf,sizeof(TDataFormat));
pd := pData(buf);
pd.a := $a;
pd.b := $b;
FillChar(pd.d,512,'a');
...
SendBuf(buf^,sizeof(TDataFormat))
....
FreeMemory(buf);
end;
 
to 张无忌:不能直接发送结构体啊,一发送就说类型不正确,sendbuffer函数发送的是一个
array参数

to : zw84611,第二方法也不行啊,错误类型同上,类型不对
 
哦,你最好用ICS的TCP/UDP控件,好用,或者用ZW84611的第一重方法
用NMUDP的sendbuf可能 有问题出现.
 
哦,原来使用Socke API做的,随便改了一下,没改对。
下面这样也许可以,可以试一下。

Type
pData= ^TDataFormat;
TDataFormat=packed record
a:Byte;
b:Byte;
c:array[0..1] of byte;
d:array [0..511] of char;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
buf: array[0..1023]of char;
pd: pData;
begin
pd := pData(@buf[0]);
pd.a := $a;
pd.b := $b;
FillChar(pd.d,512,'a');
NMUDP1.SendBuffer(buf,Sizeof(TDataFormat));
end;
 
我下载了ICS的控件,但是没看到TCP/UDP控件,都是一些什么pop3,http,ftp。。。
等地控件啊~!
能告诉我那里有下载的么?
 
最后一个wsock***就是,同时支持TCP/UDP,很多软件都是用的这个控件.
 
我看了NMUDP的代码,NMUDP的sendbuf方法用的有问题.如果超过4K可能有问题,
你可以这样
a:struc;//一个结构
b:array[0..1023]of char;
//先设置好a的内容
fillchar(b,sizeof(b),0);
move(a,b,sizeof(a));
nmudp.sendbuffer(b,sizeof(a));
 
to 张无忌;谢谢,请问有那个控件的例子么?
 
to 张无忌 : 谢谢,按照你改的方法搞定了,不过我还是希望能够看看那个ICS地例子,
很多人都说ICS不错,不知道你有没有,有的话麻烦你发到我的信箱,Sau@ibon.com.cn
再次感谢!
 
多人接受答案了。
 
后退
顶部