我现在用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怎样设置快捷键啊?
- delphi 讲数据库的数据放在xml文件里
- 删除sql 视图中的数据时,能否不删除基表的数据!
- 请问如何向SQL Server2000存入文件?
- 有关在类和类中自定义事件不能激活的问题
- 各位高手!!帮忙!!谢谢!!
- 为什么AdoTable得那么不可靠!成天:Row Can't be located!!
- 请问在做安装文件时如何添加 license 里的内容,我用的是InstallShield.Developer.v7.01
- 请教各位,在Delphi2007下安装Ehlib4.1或4.2时,出现错误!
- 如何将本地(win98)端的SQL库与NT上的库关连?
- (最好有实例)子窗口怎么更改父窗口的某Label?
- 如何将文件夹设置为共享?
在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;