NMUDP帮助中,ReadStream方法的示例代码procedure TForm1.Button1Click(Sender: TObject);
var
  MyStream: TMemoryStream;
  C: String;
begin
  C := Edit1.Text;
  NMUDP1.RemoteHost := '127.0.0.1';
  NMUDP1.ReportLevel := Status_Basic;
  NMUDP1.RemotePort := 6668;
  MyStream := TMemoryStream.Create;
  try
    MyStream.Write(C[1], Length(C));
    NMUDP1.SendStream(MyStream);
  finally
    MyStream.Free;
  end;
end;procedure TForm1.NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);
var
  C: String;
  MyStream: TMemoryStream;
begin
  MyStream := TMemoryStream.Create;
  try
    NMUDP1.ReadStream(MyStream);
    SetLength(C, NumberBytes);
    MyStream.Read(C[1], NumberBytes);
    Memo1.Lines.Add(C+': received '+IntToStr(NumberBytes)+' bytes from '+FromIP+' on port '+IntToStr(Port));
  finally
    MyStream.Free;
  end;
end;运行时
NMUDP1.ReadStream(MyStream);
此句上出现运行时异常 Stream Write Error 错

解决方案 »

  1.   

    而且比较奇怪的,在上面一个的Stream的write中无错
    而在下面的read反而出错了
      

  2.   

    经验不足,在Stream发送之前,先定位到开始位置,下面读的时候也一样
    加入一句:MyStream.Seek(0,sobeginning);
      

  3.   

    修改后为:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyStream: TMemoryStream;
      C: String;
    begin
      C := Edit1.Text;
      NMUDP1.RemoteHost := '127.0.0.1';
      NMUDP1.ReportLevel := Status_Basic;
      NMUDP1.RemotePort := 6668;
      MyStream := TMemoryStream.Create;
      try
        MyStream.Write(C[1], Length(C));
        MyStream.Seek(0,soBeginning);
        NMUDP1.SendStream(MyStream);
      finally
        MyStream.Free;
      end;
    end;procedure TForm1.NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);
    var
      C: String;
      MyStream: TMemoryStream;
    begin
      MyStream := TMemoryStream.Create;
      try
        NMUDP1.ReadStream(MyStream);
        SetLength(C, NumberBytes);
        MyStream.Seek(0,soBeginning);
        MyStream.Read(C[1], NumberBytes);
        Memo1.Lines.Add(C+': received '+IntToStr(NumberBytes)+' bytes from '+FromIP+' on port '+IntToStr(Port));
      finally
        MyStream.Free;
      end;
    end;