发送程序
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?(此行是接收时的数据)
问题就是发送的数据与接收的数据不一样呀,不知道原因在哪里?

解决方案 »

  1.   

    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 说: