这个代码是我对照着CSDN上面的教程一点点写出来的,但是不知道为什么不支持中文呢?英文和数字一切正常。unit pay;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ScktComp, StdCtrls;type
  TForm1 = class(TForm)
    MainMenu2: TMainMenu;
    N1: TMenuItem;
    ListenItem: TMenuItem;
    ConnectItem: TMenuItem;
    Disconnect: TMenuItem;
    Exit: TMenuItem;
    Memo1: TMemo;
    Memo2: TMemo;
    ClientSocket: TClientSocket;
    ServerSocket: TServerSocket;
    procedure ListenItemClick(Sender: TObject);
    procedure ConnectItemClick(Sender: TObject);
    procedure Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure ServerSocketAccept(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocketClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ExitClick(Sender: TObject);
    procedure DisconnectClick(Sender: TObject);  private
    Isserver:boolean;
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ClientSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ListenItemClick(nil);
end;procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(Socket.ReceiveText);
end;procedure TForm1.ConnectItemClick(Sender: TObject);
var
server:string;
begin
if ClientSocket.Active then ClientSocket.Active := False;
if InputQuery('计算机将连接到', '服务器地址:', Server) then
if Length(Server) > 0 then
with ClientSocket do
begin
Host := Server;
Active := True;
ListenItem.Checked := False;
end;
end;
procedure TForm1.DisconnectClick(Sender: TObject);
begin
ClientSocket.Active := False;
ServerSocket.Active := True;
end;procedure TForm1.ExitClick(Sender: TObject);
begin
ServerSocket.Close;
ClientSocket.Close;
end;procedure TForm1.ListenItemClick(Sender: TObject);
begin
  ListenItem.Checked := not ListenItem.Checked;
  if ListenItem.Checked then
  begin
  ClientSocket.Active := False;
  ServerSocket.Active := True;
  end
  else
  begin
  if ServerSocket.Active then
  ServerSocket.Active := False;
  end;
end;procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_Return then
  if IsServer then  ServerSocket.Socket.Connections[0].SendText(utf8toansi(Memo1.Lines[Memo1.Lines.Count - 1]))
  else
  ClientSocket.Socket.SendText(Memo1.Lines[Memo1.Lines.Count - 1]);
end;
procedure TForm1.ServerSocketAccept(Sender: TObject; Socket: TCustomWinSocket);
begin
IsServer := True;
end;procedure TForm1.ServerSocketClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo2.Lines.Clear;
end;procedure TForm1.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Memo2.Lines.Add(utf8toansi(Socket.ReceiveText));
end;end.

解决方案 »

  1.   

    工具是delphi2009,不管是中文英文还是数字,在memo2中显示的都是乱码utf8toansi,这个是我临时加上去的,也是不好使,高手帮忙。。
      

  2.   

    utf8toansi(Memo1.Lines[Memo1.Lines.Count - 1])
    转出来的是什么呢?utf8toansi(Socket.ReceiveText));
    按ansi发,收到就不用再utf8转ansi了吧?
      

  3.   

    delphi 2009中,string 已是unicodestring了,你用Socket.ReceiveText肯定是错误的,用ReceiveBuf。如果你用的是ASCII码的话,还要注意转码。