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发送出去
问题得到解决
分享到:
相关推荐
Flash AS3.0 Socket 编程 Flash AS3.0 中的 Socket 编程是使用 ActionScript 3.0 进行网络编程的一种方式。它允许 Flash 应用程序与服务器之间建立连接,以便进行数据交换。下面是关于 Flash AS3.0 Socket 编程的...
资源名称:flash as3.0 socket编程 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
这个"UDP.rar_as3 udp_flash as3.0 UDP_flash发送udp_udp as3_windows as3.0"的压缩包,看起来包含了一个名为"UDP.fla"的文件,这是一个Flash的源文件,可能是一个AS3的项目,用于演示或教学如何在Flash中使用UDP...
在C# 3.0中,Socket类位于System.Net.Sockets命名空间下,它为开发者提供了发送和接收数据的API。Socket支持多种协议,包括TCP(传输控制协议)和UDP(用户数据报协议),其中TCP提供面向连接的服务,保证数据的可靠...
本文将深入探讨如何使用一个Socket实例同时发送字符串和文件。在实际应用中,这通常是通过结合使用流(Stream)和序列化来实现的。 首先,我们需要理解Socket的工作原理。Socket是基于TCP/IP协议栈的,它提供了套接...
本教程将详细讲解如何在VB.NET环境下创建一个简单的字符串发送和接收程序。 首先,我们需要引入必要的命名空间: ```vbnet Imports System.Net Imports System.Net.Sockets Imports System.Text ``` 然后,我们创建...
【ActionScript3.0 Socket编程】是Flash平台中进行低级网络通信的一种方式,它允许开发者直接与服务器进行双向的二进制数据交换。在ActionScript3.0中,Socket编程涉及以下几个关键步骤: 1. **与Socket服务器建立...
使用`writeUTFBytes()`或`writeUTF()`方法可以向服务器发送字符串数据。例如: ```as3 socket.writeUTFBytes("Hello, Server!"); socket.flush(); ``` 4. **接收数据**: 当服务器发送数据时,`data`事件会被...
7. **网络通信**:通过Socket、XMLSocket或URLLoader类,AS3.0可以实现与服务器的通信,这对于多人在线游戏、高分排行榜等功能的实现非常关键。 8. **物理引擎**:虽然AS3.0本身不包含物理引擎,但可以集成第三方库...
本文将详细讲解如何在Android客户端通过Socket发送一个字符串。 首先,我们需要了解Socket的基本概念。Socket是网络编程中的一个接口,它允许两个程序通过网络连接交换数据。在Android中,我们可以使用Java的Socket...
`HEXtoString as3.as`这个文件可能包含一个函数,用于将16进制字符串转换为ByteArray,以便于Socket通信。 在AS3中,使用Socket类的步骤如下: 1. **创建Socket实例**:首先,你需要创建一个Socket对象,例如`var ...
7. **网络通信**:AS3.0提供了Socket、URLLoader等类来实现网络通信,这对于构建Web应用程序非常有用。 8. **错误处理**:良好的错误处理机制可以帮助开发者定位并修复问题。学习如何使用try-catch语句进行错误处理...
通过指定合适的编码格式,我们可以保证字符串的正确传输。 `'com.tonystark.android:socket:+'`库为Socket通信提供了一些便利工具,可能包括更方便的API,优化的性能,或者额外的功能,比如错误处理、自动重连等。...
4. **Socket类**:`new Socket(serverAddr, 8000)` 创建了一个Socket实例,指定服务器的IP地址和端口号(8000)。 5. **输入/输出流处理**:通过 `BufferedWriter` 和 `OutputStreamWriter` 对象向Socket的...
例如,`writeUTFBytes()`用于发送UTF编码的字符串。 ```as3 socket.writeUTFBytes("Hello, World!"); ``` #### 2. 写入缓冲区 写入数据后,需要调用`flush()`方法将缓冲区中的数据发送出去。如果不调用`flush()`,...
Android 3.0 SDK提供了支持Socket通信的API,使得开发者能够创建能够发送和接收数据的客户端应用程序。以下是对这个代码的详细解释: 1. **初始化和布局**: - `Socket_10_13Activity`继承自`Activity`,是Android...
西门子S71200PLC编程TCP IP...以字符串的格式直观显示发送接受数据。 自动计算发送数据长度,简化发送不定长数据过程。 接受不定长数据,转化为对应长度的字符串, 在控制过程中,只需要通过比较字符串来获取反馈状态。
此外,由于socket是字节流传输,所以发送字符串时可能需要先将其转化为字节序列(例如使用`utf8_encode()`),接收时再解码(如`utf8_decode()`)。 总的来说,"socket字符串传输"涉及到网络编程基础知识,包括TCP...