急急!为何Clientsocket接收的数据是乱码,服务器编码GB2312

jsnthy2002 2011-08-12 10:30:26
有一程序需要向unix服务器发送查询指令并且接收应答,客户端程序使用C++builder编写,使用ClientSocket控件,服务器可以接收到客户端发送的指令,但是收到的回复却是乱码,而且已被截断,长度很短。服务器传送数据编码是GB2312。客户端使用ClientSocket的receivebuff接收指令,请问我该如何处理,特别着急,谢谢
...全文
457 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrpeterchen 2011-08-17
  • 打赏
  • 举报
回复
乱码,我也遇见过

我的原因是:用来获取SERVER SOCKET的BUFFER没有初始化为0,
导致接收过来的数据,如果长度小于BUFFER的长度,就会有乱码

建议你检查CLIENT SOCKET, 是否初始化BUFFER了
Jonix 2011-08-12
  • 打赏
  • 举报
回复
TCP通讯时,一般都统一用UTF8编码的。
SonicLing 2011-08-12
  • 打赏
  • 举报
回复
我记得好像ClientSocket->ReceivedText属性就可以直接把刚接收到的文本读出来。
CppFile 2011-08-12
  • 打赏
  • 举报
回复
服务器什么模式跟客户端没关系,难道你访问新浪的http服务器,还要知道他是不是阻塞么?
SonicLing 2011-08-12
  • 打赏
  • 举报
回复
TCP一般采用流式,服务器端是否阻塞跟客户端没关系。你得确定:
1、控件的事件是否设置好了。
2、控件的连接是否成功了。

不要病急乱投医。
jsnthy2002 2011-08-12
  • 打赏
  • 举报
回复
现在大概知道是怎么回事了,服务器端是阻塞模式的,我的ClientSocket中Read事件根本触发不了,所以其实根本没有接收到应答,怎么处理这种阻塞模式的接收数据,各位大侠能不能提供一个阻塞模式下的实例,非常感谢,我还从来有做过这种程序。
Jonix 2011-08-12
  • 打赏
  • 举报
回复
如果确定服务器发的是一串数字,那就要检查你的客户端了。
zzbinfo 2011-08-12
  • 打赏
  • 举报
回复
我原来做的时候也是经常的有乱码,最后这样处理就避免了,首先在ClientSocketRead事件里面妖读数据的时候先int SockeDataSize = Socket->ReceiveLength();判断收到的长度,如果定义的有控制命令的话看是不是等于命令的长度,如果等说明传的是命令,如果不等说明是数据。用 Socket->ReceiveBuf(&MyCommand,CommandSize);把数据或命令读出。你说的乱码估计是没有把数据读全造成的
int64 2011-08-12
  • 打赏
  • 举报
回复
可以用网络调试助手等工具,接收数据看看是什么内容,

会不会是你解析的时候出错了
CppFile 2011-08-12
  • 打赏
  • 举报
回复
1.unix服务器端的程序会不会有问题,是否用过别的工具测试过?或者是成熟应用?
2.用别的工具连接,是否能正确连接?返回?
3,如何知道你的发送的数据让服务器正确解析了?是否因为发送的数据不对,导致服务器返回非预期的结果?
jsnthy2002 2011-08-12
  • 打赏
  • 举报
回复
服务器返回的肯定是GB2312的编码格式,而且只是返回一串数字而已,我在想会不会根本不是编码造成的,一般ClientSocket接收到乱码可能是什么原因呢
ccrun.com 2011-08-12
  • 打赏
  • 举报
回复
用嗅控工具先查看一下服务器返回的数据,到底是什么编码的汉字。
jsnthy2002 2011-08-12
  • 打赏
  • 举报
回复
可以说详细点吗?服务器的发送是没有办法控制的,乱码是什么原因造成的

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧