AS3.0的Socket通讯发送固定字符串(指定编码)
2007-11-15 22:35
483 查看
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发送出去
问题得到解决
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发送出去
问题得到解决
相关文章推荐
- Flash的Socket通讯发送固定字符串(指定编码)
- 以HttpGet方法获取URL数据并转换成指定编码格式的字符串
- C#中用Socket网络编程的问题,从客户端把数据发送到指定的IP和端口
- LWIP UDP socket编程 可以指定本地端口号及发送长度不能太长问题分析
- XMLSocket通讯发送安全策略文件
- 再谈一下Android下SOCKET通讯的编码问题
- Android端通过Usb建立Socket通讯(实时发送视频数据)
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- node如何使用socket.io向指定客户端发送消息
- socket发送十六进制字符串 (十六进制字符串与其他类型的转换)
- linux 摄像头采集图像经过YUYV转YUV420再经过H264编码后通过Socket发送至服务器端
- socket 发送十六进制的字符串(十六进制字符串与其他类型的转换)(转)
- Java Socket接收和发送(字符串)
- Nodejs socket.io 实现私聊:如何给指定客户端发送消息,不是群广播
- 以指定编码对字符串进行截取
- 【Android】socket client发送一个字符串
- C#.net同步异步SOCKET通讯和多线程总结(5)tcp发送和接受的代码
- 向指定 URL 发送GET,POST方法的请求(传入指定url和参数,服务器返回字符串数据)
- socket发送与接收NSData,NSData与字符串和int的转换
- socket编程-客户端向服务器发送字符串,传文件