2
我最近將Delphi 7 IDE更改爲Delphi XE5(Big change)。我正在研究一個小型客戶端/服務器應用程序,並且在嘗試讀取字符串時遇到問題。在Delphi中使用Socket Recv方法XE5
我的代碼:
Function TIOHandler.readString(Var data: String): Integer;
Var
byteReceived: Integer;
buff: Array Of Char;
Begin
byteReceived := 0;
Result := 0;
SetLength(buff, 255);
byteReceived := self.readBuffer(buff[0], SizeOf(buff));
If (byteReceived > 0) Then
Begin
SetLength(data, SizeOf(buff));
lstrcpyn(@data[1], @buff[0], SizeOf(buff));
Result := byteReceived;
End
Else If byteReceived = SOCKET_ERROR Then
Result := SOCKET_ERROR;
End;
Function TIOHandler.readBuffer(Var buffer; bufferSize: Integer): Integer;
Begin
Result := recv(self.ioSocket.aSock, buffer, bufferSize, 0);
End;
我得到難得的符號,看起來就像是字符編碼的問題。誰能告訴我哪個是我錯了。
此致敬禮。
感謝您的評論安德烈,我會解決它。我也想說,我已經通過用AnsiString替換字符串來解決問題,所以我發送和接收AnsiString。你有什麼想法?哪個更好 ? Ansi或Unicode在我的情況? –
@Samuel在某些情況下(例如,當你指定不同類型的字符串變量時)Delphi可以做隱式轉換,它可能損壞保存在字符串中的二進制數據。我認爲最好在你的情況下使用RowBinaryString類型而不是AnsiString(它與使用字節數組幾乎相同)。而且我不知道你需要什麼樣的字符串,從代碼看起來你使用字符串來傳輸二進制數據。 –
它適用於客戶端/服務器應用程序。所以我會發送/接收字符串和二進制數據。我想保留字符串,但正如我之前所說的,當我通過recv()讀取字符串時,會出現罕見的字符。 –