现在的位置: 首页 > 综合 > 正文

关于AS3 Socket学习

2013年12月13日 ⁄ 综合 ⁄ 共 1655字 ⁄ 字号 评论关闭
最近在研究socket,发现网上没有一个非常清楚的讲解,花了不少时间学习,现在准备写一个总结帖。

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

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具体用法

抱歉!评论已关闭.