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;
uj5u.com熱心網友回復:
s:=PAnsiChar(AnsiString(Socket.ReceiveText));uj5u.com熱心網友回復:
沒有作用。
uj5u.com熱心網友回復:
應該是你用的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;
uj5u.com熱心網友回復:
我用的是2010,應該也支持了。我重新定義ReceiveTex的回傳值為String 或 WideString 都不行,變成所有都是亂碼了(AnsiString 只是中文變成?號而已)
uj5u.com熱心網友回復:
只有中文亂碼,可能發送端的字符編碼是UTF-8uj5u.com熱心網友回復:
不用管服務器是什么 你直接用 Tencoding.default.getstring(buf)就完事uj5u.com熱心網友回復:
如果你的delphi 是xe版本。直接指定編碼格式就行。AContext.Connection.IOHandler.ReadString(IndyTextEncoding_8Bit);
IndyTextEncoding_8Bit可以下以下幾種格式:
IndyTextEncoding_Default: IIdTextEncoding;
IndyTextEncoding_OSDefault: IIdTextEncoding;
IndyTextEncoding_8Bit: IIdTextEncoding;
IndyTextEncoding_ASCII: IIdTextEncoding;
IndyTextEncoding_UTF16BE: IIdTextEncoding;
IndyTextEncoding_UTF16LE: IIdTextEncoding;
IndyTextEncoding_UTF7: IIdTextEncoding;
IndyTextEncoding_UTF8: IIdTextEncoding;
uj5u.com熱心網友回復:
C#默認是Unicode,轉換成同樣的字符集就可以了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/14357.html
標籤:網絡通信/分布式開發
