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()读取字符串时,会出现罕见的字符。 –