我寫了一個簡單的文件傳輸程序,運行在Windows 7上。我在一臺計算機上運行該程序作爲服務器,另一臺運行客戶端。客戶端發送一個文件傳輸的請求,然後服務器首先發送文件的名稱。然後,客戶端確認它獲得了文件名併發送文件的內容。Delphi XE - SendText通過ServerSocket在另一端返回中文或越南字符
這個程序在XP上運行得非常完美。現在我們試圖在Windows 7電腦上運行它,它有問題。問題是每當服務器回覆文件名到客戶端。
服務器通過調用ServerSocket1.SendText('File1.dat')發送文本。
客戶端看起來像中文或越南文字符。所以,我的程序失敗了。我的客戶程序必須知道文件的名稱。因此,它知道將其保存在硬盤的特定位置。
我想,SendText函數需要AnsiString,而我發送的是字符串數據。你認爲這是原因嗎?
UPDATE
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText(AnsiString('calibrate.log'));
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
Buffer:array[0..999] of char;
begin
Socket.ReceiveBuf(Buffer,Socket.ReceiveLength);
end;
向我們展示代碼。你是否在XP和Win7上運行相同的exe文件?是的,發送ANSI編碼的文本到期望UTF-16編碼文本的管道會導致中文文本被接收! –
@ David,是的,我只在Windows 7系統上運行相同的exe。 – ThN
@DavidHeffernan,我明白了。當編譯它給我警告的sendtext方法,它需要AnsiString,並通過隱式轉換我可能會丟失數據。所以,我將它明確地轉換爲AnsiString,如上所示。 – ThN