Cocos2d-x中Socket的简单使用

来源:互联网 发布:vmware10 for mac下载 编辑:程序博客网 时间:2024/05/17 03:39

今天总结一下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);//必须 加上 htonsint 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 .acceptint 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 . receivewhile (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,100,'\n');//获取一行数据,以‘\n’结束int sendLenght = send(client_fd,sentData,100,0);if (sendLenght == -1){printf("send falid");continue;}}}// 7 . closeclosesocket(client_fd);return 0;}

注意在开头引入的头文件,NotOneLess!!!


下面是客户端:

ClientDemo.cpp

// ClientSocketDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<winsock.h>#include <iostream>#include "windows.h"#pragma comment(lib,"ws2_32.lib")int _tmain(int argc, _TCHAR* argv[]){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;}// 1 . socket,int socket_fd = socket(AF_INET,SOCK_STREAM,PF_UNSPEC);if (-1 == socket_fd){printf("client socket falid");return -1;}// 2 . contectsockaddr_in setverAddress;   //服务器的地址setverAddress.sin_port = htons(2223); //iPsetverAddress.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 sendwhile (true){char sendData[100];std::cin.getline(sendData,100,'\n');if (send(socket_fd,sendData,100,0) == -1){printf("send faild");continue;}// 4 . receive char receData[100];int receLen = recv(socket_fd,receData,100,0);if (receLen == -1){printf("received faild ");continue;}printf("%s\n",receData);// 输出服务器传过来的}// 5. closeclosesocket(socket_fd);getchar();return 0;}

运行界面如图:

先启动Server ,在启动 client


1 0
原创粉丝点击