unit Unit4;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,
  IdUDPServer,IdSocketHandle,IdGlobal;type
  TForm4 = class(TForm)
    IdUDPClient1: TIdUDPClient;
    Button1: TButton;
    Edit1: TEdit;
    IdUDPServer1: TIdUDPServer;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes;
      ABinding: TIdSocketHandle);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form4: TForm4;implementation{$R *.dfm}procedure TForm4.Button1Click(Sender: TObject);
beginIdUDPClient1.Send('你好');
end;procedure TForm4.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  AData: TBytes; ABinding: TIdSocketHandle);
  var
  ss:string;
  begin     ss:=BytesToString(Adata);
  showmessage(ss);  end;end.
  采用TIdUDPClient;
    TIdUDPServer;通信
showmessage(ss)为什么弹出的为乱码

解决方案 »

  1.   

    不能用固定的字符串进行接收。  
      通常的做法是用byte()数组接收,然后再StrConv   函数转换成字符
      

  2.   

    这是编码问题,strConv函数可以处理这个问题,你只需要将汉字转换为2字节的16进制数据存入数组即可。
      

  3.   

    To 楼主: BytesToString函数是怎么定义的?To 1楼/2楼: 你们用的是哪个版本的Delphi, 印象里Delphi7及以下版本没有StrConv函数的, VB里倒是有这么一个函数。