C#服务器端:
 
void appServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
        {
                string msg;
                msg= "成功!";
                session.Send(msg);
            }DELPHI客户端:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var s: Ansistring;
begin
  s := Socket.ReceiveText;
  Edit2.Text := s; // 这里s 返回问号   ???  
end;
ReceiveText 返回的是 AnsiString,我想可能是编码的问题,C#的STRING默认是什么,DELPHI这边接收后要怎么转换?function TCustomWinSocket.ReceiveText: AnsiString;
begin
  SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
  SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;

解决方案 »

  1.   

    s:=PAnsiChar(AnsiString(Socket.ReceiveText));
      

  2.   

    应该是你用的Delphi版本太老,2009之前的版本基本不支持unicode(除了WideString类型),换高版本就好了。
    如果你非要用这一版,可以给TCustomWinSocket.增加一个重载的方法:function TCustomWinSocket.ReceiveText: AnsiString; overload;
    begin
      SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
      SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
    end; function TCustomWinSocket.ReceiveText: WideString; overload;
    begin
      SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
      SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)) div SizeOf(WideChar));
    end; TCustomWinSocket的类声明部分也要加入重载方法的声明,然后把项目build一次(注意TCustomWinSocket的源文件要在查找路径中)然后就可以:
    procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    var s: WideString;
    begin
      s := Socket.ReceiveText;
      Edit2.Text := s; 
    end;
      

  3.   


    我用的是2010,应该也支持了。我重新定义ReceiveTex的返回值为String 或 WideString 都不行,变成所有都是乱码了(AnsiString 只是中文变成?号而已)
      

  4.   

    只有中文乱码,可能发送端的字符编码是UTF-8
      

  5.   

    不用管服务器是什么 你直接用 Tencoding.default.getstring(buf)就完事