procedure send();
var temp:widestring;
begin
temp:='.....' //.....为一个unicode字符串
ServerSocket1.Socket.Connections[0].Sendtext(trim(temp));
end;客户端是用的
str1:widestring;
str1:=socket.ReceiveText;
接收的。我但是客户端显示出来是乱码。我想应该是sendtext的问题,因为sendtext里面的默认参数类型是string,在发送是可能已经将widestring转化为string了,造成了字符丢失。我又尝试了用sendbuf来发送:
procedure strtostream();
var temp:widestring;
a:tmemorystream;
buffer:PChar;
begin
temp:='.....' //.....为一个unicode字符串
GetMem(Buffer,length(temp));
//TntEdit2.Text := temp;
Tntmemo1.GetTextBuf(Buffer,length(temp))
a:=tmemorystream.create;
a.write(Buffer^,length(temp));
ServerSocket1.Socket.Connections[0].SendBuf(Buffer^,length(temp));
a.free;
end;
结果客户端收到的还是乱码,分析了一下觉得可能是GetTextBuf方法的问题,GetTextBuf返回的也是一个string类型而不是widestring。不知道问题出在哪了?
希望高手们指点一下,另外我不知道是否可以用sendstream来发送,如果可以的话怎样把Unicode字符串存在一个stream里面在发送,也请指教。谢谢!
var temp:widestring;
begin
temp:='.....' //.....为一个unicode字符串
ServerSocket1.Socket.Connections[0].Sendtext(trim(temp));
end;客户端是用的
str1:widestring;
str1:=socket.ReceiveText;
接收的。我但是客户端显示出来是乱码。我想应该是sendtext的问题,因为sendtext里面的默认参数类型是string,在发送是可能已经将widestring转化为string了,造成了字符丢失。我又尝试了用sendbuf来发送:
procedure strtostream();
var temp:widestring;
a:tmemorystream;
buffer:PChar;
begin
temp:='.....' //.....为一个unicode字符串
GetMem(Buffer,length(temp));
//TntEdit2.Text := temp;
Tntmemo1.GetTextBuf(Buffer,length(temp))
a:=tmemorystream.create;
a.write(Buffer^,length(temp));
ServerSocket1.Socket.Connections[0].SendBuf(Buffer^,length(temp));
a.free;
end;
结果客户端收到的还是乱码,分析了一下觉得可能是GetTextBuf方法的问题,GetTextBuf返回的也是一个string类型而不是widestring。不知道问题出在哪了?
希望高手们指点一下,另外我不知道是否可以用sendstream来发送,如果可以的话怎样把Unicode字符串存在一个stream里面在发送,也请指教。谢谢!
解决方案 »
- frxReport使用问题
- 我买了个新机子,装win2000复制文件时,不定时得死机,这是什么原因? 散分!
- OA问题:如何将图章(bmp,jpg)插入到word中去!
- delphi5 怎么连接dbf文件.database中的连接字符怎么写,谢谢大虾
- 100分大放送
- 刚开始学习编写组件,请大家推荐一本好书!
- 非常超值的问题,需要了解CBuilder和Delphi的
- 很简单的关于窗口问题,朋友们帮帮我,我在线
- 关于SQL SERVER与DELPHI的问题
- 菜鸟级问题,在Delphi5中怎样写小应用程序?
- socket问题,如何判断某个客户端断开连接?
- 怎么让菜单(MainMenu1)美观一些??有什么好办法吗??先谢谢;))
var temp:widestring;
iSended:integer;
begin
temp:='.....' //.....为一个unicode字符串
iSended:=ServerSocket1.Socket.Connections[0].SendBuf(Pwidechar(temp)^,length(temp)*2);
.....
end;
你的代码我测试过了,但是发送后,客户端只能接受到字符串的第一个字符。
比如我的字符串widesring:='first place';
收到的只有f一个字符。
我又加了一行代码做测试TntEdit1.text:=Pwidechar(temp)^
TntEdit中能够完全显示'first place'。
不知何解。是因为我的客户端是str:=socket.ReceiveText;
的原因还是length(temp)的原因啊?
因为它是当成单字节字符处理,在显示上会遇#0字符截断。接收的时候,可以这样处理:
var
str:string;
wstr:widestring;
n:Integer; str:=socket.ReceiveText;
n:=length(str);
setlength(wstr,n div 2);
move(pchar(str)^,pwidechar(wstr)^,n);大致这样。。没有调试。