为什么会这样,我用udp想做一个聊天的程序,
upd:tNMUDP;端口均为2000(暂用本机作试验)
按下按钮发消息到本机,但收到时为什么不正确,如下程序,收到的数据将是:
“from:127.0.0.1,bytes:18=>hell”
也就是说只有前四个字符正确,后面是乱码,而且换发别的数据也同样只有前四个字符正确,请大家说说问题在哪里?相关代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var str:string;
begin
 udp.RemoteHost:='127.0.0.1';
 str:='hello,how are you!';
 udp.SendBuffer(str[1],length(str));
end;
procedure TForm1.udpDataReceived(Sender: TComponent; NumberBytes: Integer;
  FromIP: String; Port: Integer);
var str:string;
begin
setlength(str,numberbytes);
udp.ReadBuffer(str[1],numberbytes);
memo1.Lines.Add('from:'+fromip+',bytes:'+inttostr(numberbytes)+'=>'+str);
end;另外顺便问一句:我想发一条广播消息,IP地址设为255.255.255.255为什么不行,他会提示host lookup error什么的!只有设为192.168.0.255才能在本局域内发,设为192.168.255.255也不行,这是否跟子网掩码有关(是255.255.255.0),那么如何在程序中得到子网掩码呢?

解决方案 »

  1.   

    另外顺便问一句:我想发一条广播消息,IP地址设为255.255.255.255为什么不行,他会提示host lookup error什么的!只有设为192.168.0.255才能在本局域内发,设为192.168.255.255也不行,这是否跟子网掩码有关(是255.255.255.0),那么如何在程序中得到子网掩码呢?
    这跟ip地址有关,有A,B,C类ip之分
      

  2.   

    也就是说只有前四个字符正确,后面是乱码说明你发送或者接收的数目不对
    udp.SendBuffer(str[1],length(str));
    udp.ReadBuffer(str[1],numberbytes);
    看看你的length(str) 和 numberbytes是不是正确了。
    不如你先把他们改成一个数字来试试看就知道了。