UDP协议发送和接收数据的问题,在线等待,解决立即给分!!!

yang946 2003-02-27 02:17:10
发送程序
procedure TForm1.btnSendClick(Sender: TObject);
var
txt:pchar;
begin
//valid
if Memo1.Text='' then
begin
StatusBar1.SimpleText:='Nothing to send';
exit;
end;
//infact only 1024 byte can send
GetMem(txt,Length(Memo1.Text)+1);
ZeroMemory(txt,Length(Memo1.Text)+1);
txt:=PChar(Memo1.Text);
//set ip info
NMUDP1.RemoteHost := Edit1.Text;
NMUDP1.RemotePort := StrToInt(Edit2.Text);
//send
NMUDP1.SendBuffer(txt^,Length(Memo1.Text));
end;

接收的程序:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
TXT: PChar;
Count: Integer;
begin
StatusBar1.SimpleText:='Receiving data';
GetMem(txt,NUmberBytes+1);
ZeroMemory(txt,NumberBytes+1);
count:=numberbytes+1;
NMUDP1.ReadBuffer(TXT^, count);
Memo1.Lines.Add(TXT);
FreeMem(Txt);
StatusBar1.SimpleText:='data Received';
end;
运行的结果:
34535345(此行是发送时的数据)
3453?(此行是接收时的数据)
问题就是发送的数据与接收的数据不一样呀,不知道原因在哪里?
...全文
97 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bewill 2003-02-27
CoolSlob.NET 说:
好像有一个SendText 方法吧,
CoolSlob.NET 说:
如果你传输少量数据的话用SendText比较简单
Toad 说:
嗯,sendbuffer有1024字节的限制
Toad 说:
倒是有一个sendstream
Toad 说:
但SENDBUFFER为什么会丢失数据呀?
CoolSlob.NET 说:
应该是长度不够
Toad 说:
长度够呀,检查了它传过来数据的长度了
CoolSlob.NET 说:
在接收数据触发事件中,需要做缓冲。
CoolSlob.NET 说:
你发送的数据,有可能是分几次传送的,
Toad 说:
哦?
CoolSlob.NET 说:
明白啦?
Toad 说:
有一些明白了,但不知道如何解决呀
CoolSlob.NET 说:
做一个全局变量。
CoolSlob.NET 说:
每次接收的数据做+操作。
Toad 说:
想不想要分呀?去把那个贴结了吧
CoolSlob.NET 说:
当然要分,我现在用别人的同,,
CoolSlob.NET 说:
回复
bewill 2003-02-27
test
回复
yang946 2003-02-27
没人会吗?
回复
相关推荐
发帖
网络通信/分布式开发
创建于2007-08-02

1575

社区成员

Delphi 网络通信/分布式开发
申请成为版主
帖子事件
创建了帖子
2003-02-27 02:17
社区公告
暂无公告