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;
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;
如果你非要用这一版,可以给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;
我用的是2010,应该也支持了。我重新定义ReceiveTex的返回值为String 或 WideString 都不行,变成所有都是乱码了(AnsiString 只是中文变成?号而已)