今天总结一下Socket的使用方法吧,有在百度。。上面找到的(下面有百度的链接,写的不全的地方,大家可以看一下链接,)。。。如果哪位大神有更换的demo,求分享!!!
Cocos2d-x中有关网络请求的:get post put delete(后两者我在开发中很少用),还有就是 Socket(用于及时通讯,网络游戏中的队友通话)。
在vs下面新建一个一个工程(记住不是Cocos项目!!!)C++文件。作为Server
百度上面的相关解释:http://baike.baidu.com/view/2355183.htm?fr=aladdin
ServerDemo.cpp:
// WebSocketDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <WinSock2.h>#include <iostream>#include "windows.h"#pragma comment(lib,"ws2_32.lib")int _tmain(int argc,_TCHAR* argv[]){ //windows下面的网络编程 WORD wVersionRequested; WSADATA wsaData; //用于接受windows Socket 的结构信息 int err; wVersionRequested = MAKEWORD(1,1); //请求1.1版本的windows 库 err = WSAStartup(wVersionRequested,&wsaData); if (err !=0) { return -1; //返回值为 0 表示 成功申请 WSAStartup } if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){ //检测低字节是不是 1 高字节是不是 1 ,确定是不是我们请求的 1.1版本 WSACleanup(); // 否则用这个函数清除信息,结束 return -1; } /************************************************************************/ /* 以上是windows需要添加的内容,Mac下面不用添加,直接抄写就行,每次都一样,以下才是服务器端需要写的代码 */ /************************************************************************/ // 1. 创建Socket //类型 、流式Socket 、协议 int socket_fd = socket(AF_INET,SOCK_STREAM,PF_Unspec); if (socket_fd == -1){//如果socket返回 -1就 返回,防止崩。。。。 printf("Server Socket Err"); return -1; } // 2. bind 绑定 sockaddr_in serverAddress; serverAddress.sin_family = AF_INET; //一般来说AF_INET(地址族)PF_INET(协议族) serverAddress.sin_addr.S_un.S_addr = htonl(ADDR_ANY); serverAddress.sin_port = htons(7777); //必须 加上 htons int bind_fd = bind(socket_fd,(sockaddr*)(&serverAddress),sizeof(serverAddress)); if (bind_fd == -1){ printf("bind fiald"); return -1; } // 3 .Listen 监听 if (Listen(socket_fd,2) == -1){ printf("Listen faild"); return -1; } // 4 .accept int clIEnt_fd; sockaddr_in clIEntAddress; int s = sizeof(clIEntAddress); clIEnt_fd = accept(socket_fd,(sockaddr *)&clIEntAddress,&s); if (clIEnt_fd == -1){ printf("accept falID"); return -1; } // 5 . receive while (true) { char buf[100]; int recv_data = recv(clIEnt_fd,buf,100,0); if (recv_data == -1){ printf("receive falID\n"); continue; }else if(recv_data == 0){ closesocket(socket_fd); }else{ // 6 .send 发送数据 printf("%s\n",buf); //打印客户端发来的数据 char sentData[100]; std::cin.getline(sentData,'\n'); //获取一行数据,以‘\n’结束 int sendLenght = send(clIEnt_fd,sentData,0); if (sendLenght == -1){ printf("send falID"); continue; } } } // 7 . close closesocket(clIEnt_fd); return 0;}
注意在开头引入的头文件,NotOneLess!!!
下面是客户端:
ClIEntDemo.cpp
// ClIEntSocketDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <winsock.h>#include <iostream>#include "windows.h"#pragma comment(lib,_TCHAR* argv[]){ WORD wVersionRequested; WSADATA wsaData; //用于接受windows Socket 的结构信息 int err; wVersionRequested = MAKEWORD(1,&wsaData); if (err !=0) { return -1; //返回值为 0 表示 成功申请 WSAStartup } if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){ //检测低字节是不是 1 高字节是不是 1 ,确定是不是我们请求的 1.1版本 WSACleanup(); // 否则用这个函数清除信息,结束 return -1; } // 1 . socket,int socket_fd = socket(AF_INET,PF_Unspec); if (-1 == socket_fd){ printf("clIEnt socket falID"); return -1; } // 2 . contect sockaddr_in setverAddress; //服务器的地址 setverAddress.sin_port = htons(2223); //iP setverAddress.sin_family = AF_INET; setverAddress.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); int connect_fd = connect(socket_fd,(sockaddr *)&setverAddress,sizeof(setverAddress)); if (connect_fd == -1){ printf("contect falID "); return -1; } // 3 send while (true) { char sendData[100]; std::cin.getline(sendData,'\n'); if (send(socket_fd,sendData,0) == -1){ printf("send faild"); continue; } // 4 . receive char receData[100]; int receLen = recv(socket_fd,receData,0); if (receLen == -1){ printf("received faild "); continue; } printf("%s\n",receData); // 输出服务器传过来的 } // 5. close closesocket(socket_fd); getchar(); return 0;}
运行界面如图:
先启动Server ,在启动 clIEnt
总结
以上是内存溢出为你收集整理的Cocos2d-x中Socket的简单使用全部内容,希望文章能够帮你解决Cocos2d-x中Socket的简单使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)