我现在用C#.net写了一个socket客户端,然后用delphi7.0写的一个socket的服务器端,可是连接后当我用.net写的客户端往服务器端发送消息时,数字为空,比如我在客户端发送了个12345,跟踪到在delphi里的是#0'1'#0'2'#0'3'#0'4'#0'5',而显示到edit上面就是什么都没有,为空。好像是编码的问题,可是要怎么转换呢,C#的是Unicode编码,delphi这边应该怎么办呢,我试了很多方法啊,像widechartostring ,widechartostring ,WideString,都不行啊,我现在。delphi刚学的很不熟啊,请教下各位大侠啊~~~~~~~~~
在Delphi里你可以用WideString类型变量来存储它,然后再用AnsiString(变量)来强类型转换为AndiString。
用widestring/widechar/pwidechar来处理.
//取得匹配的客户端
if session[i].CHandle = Socket.SocketHandle then
begin
//session[i].CSocket.SendText('回复客户端'+session[i].CAddress+' ==> '+Edit1.Text);
//将从客户端读取的信息添加到Memo1中
showmessage( Socket.ReceiveText);
end;
end;
就是这样的,socket.receivetext得到socket通信客户端发来的信息,然后我想把这个信息显示出来,就这么简单,跟踪看到的就是#0'1'#0'2'#0'3'#0'4'#0'5',显示出来就空的什么都没有。要怎么转换下啊
改成这样试试:ShowMessage(AnsiString(WideString(Socket.ReceiveText)));
这个我试了,依然不行啊;
我也觉得奇怪啊,但跟踪到的的确是#0'1'#0'2'#0'3'#0'4'#0'5'这个啊
i, L: Integer;
C : Char;
W : WideString;
Buf : array of Char;
begin
//取得匹配的客户端
if session[i].CHandle = Socket.SocketHandle then
begin
//session[i].CSocket.SendText('回复客户端'+session[i].CAddress+' ==> '+Edit1.Text);
//将从客户端读取的信息添加到Memo1中
L := Socket.ReceiveLength;
SetLength(Buf, L);
Socket.ReceiveBuf(Buf[0], L);
//交换字节顺序
for i := 0 to L div 2 - 1 do
begin
C := Buf[i * 2];
Buf[i * 2] := Buf[i * 2 + 1];
Buf[i * 2 + 1] := C;
end;
//转换为WideString
SetLength(W, L div 2);
Move (Buf[0], W[1], L);
ShowMessage (W);
end;
end;