我在使用NMUDP编程的时候,遇到了一个奇怪的问题.代码见下面!发送数据的过程
var
  mystream:TmemoryStream;
  tempStr:string;
begin
  Nmudp1.RemotePort:=StrToInt('5000');
  Nmudp1.RemoteHost:='219.133.51.29';
  tempStr:='hello!';
  try
    mystream:=TmemoryStream.Create;
    mystream.Write(tempStr[1],length(tempStr));
    Nmudp1.SendStream(mystream);
  finally
    mystream.Free;
  end;
受到数据的过程
var
  mystream:TmemoryStream;
  tempStr:string;
begin
  mystream:=tmemoryStream.Create;
  try
    nmudp1.ReadStream(mystream);//在此行报错
    SetLength(tempStr,NumberBytes);
    Mystream.Read(tempstr[1],NumberBytes);
    memo1.Lines.Add(tempstr);
  finally
    mystream.Free;
  end;
      我点击了发送数据的按钮后,报错stream write error ,奇怪的是,这是在接受数据时报错的,而我的NMUDP1.localport设置为2200,本地机器的ip为222.212.22.90(我用adsl上网),我进行了跟踪发现,NMUDP1受到了来自219.133.51.29,端口为5000的数据包,但是在这个ip上,不是我的机器,更不可能有我的程序啊,它怎么会向我的程序发数据包呢?更奇怪的时期,当我没有上adsl使用本地ip为192.168.0.1,程序内容不变时,它就不包错了,跟踪表明它不会受到来自219.133.51.29,端口为5000的数据包,即根本就没有执行接受数据的过程,这是怎么会事情啊,请各位高手指点!

解决方案 »

  1.   

    不要用NM的组件,改用Indy好了.....
      

  2.   

    nmudp的BUF大小必须小于等于2048,就是2K
      

  3.   

    这个控件还是少用,有bug
    用indy的idudpserver
      

  4.   

    大概是ADSL的NAT(网络地址转换)把你的地址改掉了。以前我也遇到过相似的问题,我做的JSP服务器别人就是无法访问,后来发现我自己设置的地址和别人看到的不一样。你可以用对方的IP QQ来看一下自己的IP,或者到一些论坛看看他的记录。另外,对于UDP,有可能是路由转发过了。