加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输

发布时间:2020-12-14 20:04:05 所属栏目:百科 来源:网络整理
导读:WebSocket 首先新建一个空的文件夹,通过npm安装nodejs-websocket: 1 npminstallnodejs-websocket 新建app.js文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 varws=require( "nodejs-websocket" ); ws.createServer(function(conn){ conn.on( "text" ,function(str)

WebSocket

首先新建一个空的文件夹,通过npm安装nodejs-websocket:

1
npminstallnodejs-websocket


新建app.js文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
varws=require( "nodejs-websocket" );
ws.createServer(function(conn){
conn.on( "text" ,function(str){
console. log ( "getthemessage:" +str);
conn.sendText( "theservergotthemessage" );
})
conn.on( "close" ,function(code,reason){
console. log ( "connectionclosed" );
});
conn.on( "error" ,reason){
console. log ( "anerror!" );
});
}).listen(8001);


通过node app.js启动,这样服务器就搭建好了。


Cocos2d-x

首先在头文件中include头文件:

1
#include"network/WebSocket.h"


实现WebSocket的委托:

1
class HelloWorld: public cocos2d::Layer, public cocos2d::network::WebSocket::Delegate


四个委托中定义的函数接口以及一个用来连接的socketClient对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//forvirtualfunctioninwebsocketdelegate
virtual void onOpen(cocos2d::network::WebSocket*ws);
virtual void onMessage(cocos2d::network::WebSocket*ws, const cocos2d::network::WebSocket::Data&data);
virtual void onClose(cocos2d::network::WebSocket*ws);
virtual void onError(cocos2d::network::WebSocket*ws, const cocos2d::network::WebSocket::ErrorCode&error);
//thewebsocketioclient
cocos2d::network::WebSocket*_wsiClient;
初始化client:
_wsiClient= new cocos2d::network::WebSocket();
_wsiClient->init(* this , "ws://localhost:8001" );
在cpp文件中实现这些函数:
//开始socket连接
void HelloWorld::onOpen(cocos2d::network::WebSocket*ws)
{
CCLOG( "OnOpen" );
}
//接收到了消息
void HelloWorld::onMessage(cocos2d::network::WebSocket*ws, const cocos2d::network::WebSocket::Data&data)
{
std::stringtextStr=data.bytes;
textStr.c_str();
CCLOG(textStr.c_str());
}
//连接关闭
void HelloWorld::onClose(cocos2d::network::WebSocket*ws)
{
if (ws==_wsiClient)
{
_wsiClient=NULL;
}
CC_SAFE_DELETE(ws);
CCLOG( "onClose" );
}
//遇到错误
void HelloWorld::onError(cocos2d::network::WebSocket*ws, const cocos2d::network::WebSocket::ErrorCode&error)
{
if (ws==_wsiClient)
{
char buf[100]={0};
sprintf (buf, "anerrorwasfired,code:%d" ,error);
}
CCLOG( "Errorwasfired,errorcode:%d" ,error);
}


还有一个使用SocketIO的方案(本文作者只提供了源码,但是尚未测试,您可以与作者一起测试,并可以提供反馈):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//RequireHTTPmodule(tostartserver)andSocket.IO
varhttp=require( 'http' ),io=require( 'socket.io' );
//Starttheserveratport8080
varserver=http.createServer(function(req,res){
//SendHTMLheadersandmessage
res.writeHead(200,{ 'Content-Type' : 'text/html' });
res.end( '<h1>HelloSocketLover!</h1>' );
});
server.listen(8080);
//CreateaSocket.IOinstance,passingitourserver
varsocket=io.listen(server);
//Addaconnectlistener
socket.on( 'connection' ,function(client){
//Createperiodicalwhichendsamessagetotheclientevery5seconds
varinterval=setInterval(function(){
client.send( 'Thisisamessagefromtheserver!' + new Date().getTime());
},5000);
//Success!Nowlistentomessagestobereceived
client.on( 'message' ,function(event){
console. log ( 'Receivedmessagefromclient!' ,event);
});
client.on( 'disconnect' ,function(){
clearInterval(interval);
console. log ( 'Serverhasdisconnected' );
});
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读