转载于: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具体用法