• 关于AS3 Socket学习


    转载于:https://www.xuebuyuan.com/1469710.html

    分下面几个专题,一个一个讲解

    1.socket与http

    (1)TCP连接

    简单讲就是实现了TCP/IP协议对上层网络提供接口,建立一个TCP连接需要“三次握手”,其实我们做游戏不需要知道这个,至少目前我做的游戏不需要知道,如果以后用到着再学习吧,现在就是一个简单的了解。

    (2)HTTP连接

    超文本传送协议,是建立在TCP协议上的一种应用。

    特点是“短连接”,即客户端发送的每次请求都需要服务器回送响应,请求结束后,会自动释放连接。要保持客户端的在线状态需要不断的向服务器发送请求。

    (3)SOCKET连接

    socket即套接字,要建立socket至少需要一对socket。一个运行在客户端,一个运行在服务端。

    建立过程:服务端的socket先监听端口号,客户端发送连接请求,连接。

    socket建立之后的连接,会一直处于连接状态,即“长连接”(如果不出意外不会断开,网络不好,网关,防火墙之类的)

    (4)socket与http的比较

    需要服务器向客户端推送数据,保持客户端与服务器的实时和同步,用socket。

    如果建立的是http连接,则服务器需要客户端发送请求之后才能将数据传输给客户端,如果要同步数据,则客户端需要不停的请求数据。

    所以我们做游戏的时候通常使用socket,这样的即时性高。但有一些游戏也使用http连接,一些及时性需求不是很高的游戏。列入:卡牌游戏,象棋。

    socket是长连接,建立之后服务器会开启一个线程处理与客户端socket的收发消息,当然这样比http占用的资源多。

    2.socket基础

    客户端建立socket连接需要知道,IP地址和端口号。

    最简单的socket连接代码

    var socket:Socket = new Socket;
    			socket.addEventListener(IOErrorEvent.IO_ERROR,errorFun);
    			socket.addEventListener(Event.CONNECT,connectFun);
    			socket.connect(_ip,_port);

    创建一个socket,监听连接成功和失败事件,然后连接。

    连接成功之后,你可以继续监听服务器消息事件和socket连接关闭事件

    socket.addEventListener(ProgressEvent.SOCKET_DATA,socketDataFun);
    			socket.addEventListener(Event.CLOSE,closeFun);

    如果收到来自服务器的消息,就会触发

    ProgressEvent.SOCKET_DATA

    这个事件,然后你就可以再socketDataFun这个函数中,处理你接收到的消息。

    要向服务器发送socket消息,你要先将要发送的消息写入socket。可以调用的方法有很多,意义各种不一样。这里就讲一个最简单的。

    socket.writeMultiByte(string,"gbk");
    			socket.flush();

    调用writeMultiByte方法向socket中写入string字符串,字符串的格式是gbk的(发中文的话最好是UTF-8);

    然后调用flush()方法将字符串发送出去,这时候服务器就可以收到你发过来的字符串了,服务器的socket调用readMultiByte方法就可以读出你发送过来的字符串。

    当然我们做游戏的时候不可能这么简单,在我们大量发送接收socket消息的时候,肯定要让socket变得高效,所以我们一般不直接发送字符串,而是用二进制流。

    这是一篇讲 socket 断包,多包,少包,粘包的文章

    http://tsing01.blog.163.com/blog/static/2059572832012716103711125/

    3.socket最简单的例子

    4.做游戏一般使用Socket和ByteArray

    5.为什么使用ByteArray

    6.ByteArray具体用法

  • 相关阅读:
    浅析 x1B[1;3;31mxterm.jsx1B[0m 是什么?如何在终端输出带颜色等格式的字符串
    使用xterm报错:Error: Terminal requires a parent element、及删除时报错:xterm.js: Parsing error 的问题
    浅析如何实现浏览器访问远程桌面/服务器界面:NoVNC
    浅析NAS网络存储是什么及其主要用途
    浅析uniapp如何做图片裁剪及遇到问题 uni.canvasToTempFilePath 在APP下返回的是临时路径,如何把路径转为base64的解决方案
    浅析webpack中mode的取值及不同取值的作用/打包方式及摇树优化(tree-shaking)的理解
    P1160 队列安排题解
    P1996 约瑟夫问题题解
    P1449 后缀表达式题解
    P1825 玉米田迷宫题解
  • 原文地址:https://www.cnblogs.com/dt1991/p/12523933.html
Copyright © 2020-2023  润新知