TNMUDP控件接收数据时为什么会有乱码?? (30分)

  • 主题发起人 主题发起人 linshengcd
  • 开始时间 开始时间
我也碰你的问题,我现在用WINSOCK写的
 
发送改成:
procedure TForm1.Button1Click(Sender: TObject);
begin
if memo1.Text ='' then
begin
statusbar1.SimpleText :='null to send!';
exit;
end;
nmudp1.SendBuffer(PChar(memo1.text)^,length(memo1.text));
end;
 
注意 PChar(memo1.text)^ 后面那个小小的 ^ 号不能缺少
 
请问各位同仁,用WINSOCK写是不是很麻烦,各位请给个主意,先谢
 
PIPI兄,先谢为敬了,你的好像不行呀
 
海风兄:
经过测试,你的代码是正确的,问题终于解决了,我代表所有没解决这个问题的但
想解决这个问题的同仁向你说声"谢了"
 
海风兄:为什么只能var txt:array[0..59] of char;//这个长度你可以动态设置
而不能使用动态分配的方法呢?如上面的代码:
点发送按钮:
procedure TForm1.Button1Click(Sender: TObject);
var txt:pchar;
begin
if memo1.Text ='' then
begin
statusbar1.SimpleText :='null to send!';
exit;
end;
GetMem(txt,length(memo1.Text)+1);
Zeromemory(txt,length(memo1.Text )+1);
txt:=pchar(memo1.Text );
nmudp1.SendBuffer(txt^,length(memo1.Text ));
end;
还望指点.先谢.
 
用TUDP的STREAM的例子,我用这个就没有乱码出现,其它的我就不知了。
 
乱吗是因为你没有初始化数组(两边都要?)
FillMemory(&Array,0,ArraySize);
如果是c则memset();
另外,用sendstream是不会有这个问题的。
 
getmem(txt,numberbytes+1);是分配内存
zeromemory(txt,numberbytes+1);是初始化
应该是这样
而且SENDSTREAM不是TNMUDP的 ,而是TNMSTRSERV的吧
 
为什么不能用pchar而用array of char 的问题,原因目前不太确定
sendbuffer函数的第一个参数类型是array of char类型
虽然你在sendbuffer中使用pchar的指针,编译没有问题,但
可能是sendbuffer函数本身处理时可能会出现问题,却没有任何提示。
因而造成接收时的数据出现部分错误。
 
我上面就提到过你要用ARRAY [1..1024]OF CHAR来保存数据,....
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部