egret.WebSocket
包 egret
类 public class WebSocket
继承 egret.WebSocket → egret.EventDispatcher → egret.HashObject
egret.WebSocket 类启用代码以建立传输控制协议 (TCP) 套接字连接,用于发送和接收字符串或二进制数据。要使用 egret.WebSocket 类的方法,请先使用构造函数 new egret.WebSocket 创建一个 egret.WebSocket 对象。套接字以异步方式传输和接收数据。
公共属性
| 属性 | 
|---|
| TYPE_BINARY : string   [静态]以二进制格式发送和接收数据  | 
| TYPE_STRING : string   [静态]以字符串格式发送和接收数据  | 
| connected : boolean   表示此 Socket 对象目前是否已连接  | 
| type : string   发送和接收数据的格式,默认是字符串格式  | 
公共方法
| 方法 | 
|---|
| WebSocket(host:string,port:number)   创建一个 egret.WebSocket 对象参数为预留参数,现版本暂不处理,连接地址和端口号在 connect 函数中传入  | 
| close():void   关闭套接字  | 
| connect(host:string,port:number):void   将套接字连接到指定的主机和端口  | 
| connectByUrl(url:string):void   根据提供的url连接  | 
| flush():void   对套接字输出缓冲区中积累的所有数据进行刷新  | 
| readBytes(bytes:egret.ByteArray,offset:number,length:number):void   从套接字读取 length 参数指定的数据字节数  | 
| readUTF():string   从套接字读取一个 UTF-8 字符串  | 
| writeBytes(bytes:egret.ByteArray,offset:number,length:number):void   从指定的字节数组写入一系列字节  | 
| writeUTF(message:string):void   将字符串数据写入套接字  | 
事件
| Events | 
|---|
| egret.Event.CONNECT   连接服务器成功。  | 
| egret.ProgressEvent.SOCKET_DATA   接收服务器数据。  | 
| egret.Event.CLOSE   在服务器关闭连接时调度。  | 
| egret.IOErrorEvent.IO_ERROR   在出现输入/输出错误并导致发送或加载操作失败时调度。。  | 
属性详细信息
TYPE_BINARY
TYPE_BINARY : string = "webSocketTypeBinary"
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
以二进制格式发送和接收数据
TYPE_STRING
TYPE_STRING : string = "webSocketTypeString"
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
以字符串格式发送和接收数据
connected
connected : boolean
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
表示此 Socket 对象目前是否已连接
type
type : string
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
发送和接收数据的格式,默认是字符串格式
方法详细信息
WebSocket()
public WebSocket(host:string,port:number)
创建一个 egret.WebSocket 对象参数为预留参数,现版本暂不处理,连接地址和端口号在 connect 函数中传入
close()
public close():void
关闭套接字
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
connect()
public connect(host:string,port:number):void
将套接字连接到指定的主机和端口
connectByUrl()
public connectByUrl(url:string):void
根据提供的url连接
- 支持版本:all
 - 运行平台:Web,Native
 - 参数
- url:string - 全地址。如ws://echo.websocket.org:80
 
 
flush()
public flush():void
对套接字输出缓冲区中积累的所有数据进行刷新
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
readBytes()
public readBytes(bytes:egret.ByteArray,offset:number,length:number):void
从套接字读取 length 参数指定的数据字节数。从 offset 所表示的位置开始,将这些字节读入指定的字节数组
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 - 参数
- bytes:egret.ByteArray - 要将数据读入的 ByteArray 对象
 - offset:number - 数据读取的偏移量应从该字节数组中开始
 - length:number - 要读取的字节数。默认值 0 导致读取所有可用的数据
 
 
readUTF()
public readUTF():string
从套接字读取一个 UTF-8 字符串
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 
writeBytes()
public writeBytes(bytes:egret.ByteArray,offset:number,length:number):void
从指定的字节数组写入一系列字节。写入操作从 offset 指定的位置开始。如果省略了 length 参数,则默认长度 0 将导致该方法从 offset 开始写入整个缓冲区。如果还省略了 offset 参数,则写入整个缓冲区。
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 - 参数
- bytes:egret.ByteArray - 要从中读取数据的 ByteArray 对象
 - offset:number - ByteArray 对象中从零开始的偏移量,应由此开始执行数据写入
 - length:number - 要写入的字节数。默认值 0 导致从 offset 参数指定的值开始写入整个缓冲区
 
 
writeUTF()
public writeUTF(message:string):void
将字符串数据写入套接字
- 支持版本:Egret 2.4
 - 运行平台:Web,Native
 - 参数
- message:string - 要写入套接字的字符串
 
 
示例
/*
 * 下面的示例使用 WebSocketExample 类创建新 WebSocket 对象,然后与服务器通讯。
 */
class  WebSocketExample  extends  egret.DisplayObjectContainer  {
    public  constructor()  {
        super();
        this.initStateText();
        this.initWebSocket();
    }
    private stateText: egret.TextField;
    private text:  string  =  "TestWebSocket";
    private  initStateText():  void  {
    this.stateText  =  new  egret.TextField();
    this.stateText.size  =  22;
    this.stateText.text  =  this.text;
    this.stateText.width  =  480;
    this.addChild(this.stateText);
  }
  private socket: egret.WebSocket;
  private  initWebSocket():  void  {
    //创建 WebSocket 对象
    this.socket  =  new  egret.WebSocket();
    //设置数据格式为二进制,默认为字符串
    this.socket.type  = egret.WebSocket.TYPE_BINARY;
    //添加收到数据侦听,收到数据会调用此方法
    this.socket.addEventListener(egret.ProgressEvent.SOCKET_DATA,  this.onReceiveMessage,  this);
    //添加链接打开侦听,连接成功会调用此方法
    this.socket.addEventListener(egret.Event.CONNECT,  this.onSocketOpen,  this);
    //添加链接关闭侦听,手动关闭或者服务器关闭连接会调用此方法
    this.socket.addEventListener(egret.Event.CLOSE,  this.onSocketClose,  this);
    //添加异常侦听,出现异常会调用此方法
    this.socket.addEventListener(egret.IOErrorEvent.IO_ERROR,  this.onSocketError,  this);
    //连接服务器
    this.socket.connect("echo.websocket.org",  80);
  }
  private  sendData():  void  {
    //创建 ByteArray 对象
    const byte: egret.ByteArray  =  new  egret.ByteArray();
    //写入字符串信息
    byte.writeUTF("Hello Egret WebSocket");
    //写入布尔值信息
    byte.writeBoolean(false);
    //写入int值信息
    byte.writeInt(123);
    byte.position  =  0;
    //发送数据
    this.socket.writeBytes(byte,  0, byte.bytesAvailable);
  }
  private  onSocketOpen():  void  {
    this.trace("WebSocketOpen");
    this.sendData();
  }
  private  onSocketClose():  void  {
    this.trace("WebSocketClose");
  }
  private  onSocketError():  void  {
    this.trace("WebSocketError");
  }
  private  onReceiveMessage(e: egret.Event):  void  {
    //创建 ByteArray 对象
    const byte: egret.ByteArray  =  new  egret.ByteArray();
    //读取数据
    this.socket.readBytes(byte);
    //读取字符串信息
    const msg:  string  = byte.readUTF();
    //读取布尔值信息
    const boo:  boolean  = byte.readBoolean();
    //读取int值信息
    const num:  number  = byte.readInt();
    this.trace("收到数据:");
    this.trace("readUTF : "  + msg);
    this.trace("readBoolean : "  + boo.toString());
    this.trace("readInt : "  + num.toString());
  }
  private  trace(msg:  any):  void  {
    this.text  =  this.text  +  "\n"  + msg;
    this.stateText.text  =  this.text;
    egret.log(msg);
  }
}

