当前位置 :主页>知识堂>As3.0编程>列表

AS3.0的Socket通讯发送固定字符串(指定编码)

时间:2008-04-06 来源:www.sujun.org  作者:弃天笑   点击:
    核心提示:最近在做项目过程中,遇到了一些中文问题,就是flash客户端与服务端传输中文出现乱码的问题 还有一个就是C++服务端每次接受一条字符串信息,需要固定字节...
   最近在做项目过程中,遇到了一些中文问题,就是flash客户端与服务端传输中文出现乱码的问题,还有一个就是C++服务端每次接受一条字符串信息,需要固定字节。
  例如C++服务端需要接受一条用户名的信息,名字长度是32个字节,也就是说,C++服务端每次要获取名字的时候都是在socket中读取32个字节,不管flash客户端输入的用户名是否有32个字节]。这样的话,flash客户端就要做一些处理,也就是当用户输入用户名达不到32个长度时,我们必须给他补长度。
起初我是用socket的writeUTFBytes方法写入字符串,然后用一个ByteArray补上剩余的长度下面是代码:
var msg:String = "my name is soda";
socket.writeByte(msg);
var len:int = msg.length;
//算出剩余长度
byte.length = 32- len;
socket.writeUTFBytes(msg) ;  //先发送名字
socket.writeBytes(byte);        //再发送补的长度

其实这是一个蠢方法,当时比较急,没仔细看api造成的。
但是这样做问题就来了,在flash的字符串中,不管是中文还是英文,都是一个字或者字母算一个长度,但是实际上中文是占两个字节,英文占一个字节,这样发送中文时就会出现错误。
后来改用另外一种写法,就完全解决了,同时也可以发送特定的编码集:
var msg:String = "my name is soda";
var byte = new ByteArray();
byte.writeMultiByte(msg, "gb2312");  //指定字符编码集
byte.length = 32;
socket.writeBytes(byte);

这样就很简单,就是把要发送的文字先写进ByteArray里,然后指定他的字节长度,最后用socket把ByteArray发送出去,问题得到解决

上一篇:在AS3.0中怎么样响应鼠标和键盘事件     下一篇:As3.0 xml + Loader应用
版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。
转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。
特别注意:本站所提供的源文件,电子书,第三软件,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。
 评论内容:(最新评论共有 0) 位网友发表了评论不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码: 匿名? 马上注册
 
 
知识堂分类
 
本站所提供的所有素材版权归原作者所有,本站只供网友参考与交流,未经作者同意请勿用于商业用途
服务器带宽提供:零刻数据 本站CDN由海诺互动提供技术支持。 下载带宽支持:重庆万网
京ICP备08051668号