Cocos2d-x中Socket的简单使用

Cocos2d-x中Socket的简单使用,第1张

概述今天总结一下Socket的使用方法吧,有在百度。。上面找到的(下面有百度的链接,写的不全的地方,大家可以看一下链接,)。。。如果哪位大神有更换的demo,求分享!!! Cocos2d-x中有关网络请求的:get post put delete(后两者我在开发中很少用),还有就是 Socket(用于及时通讯,网络游戏中的队友通话)。 在vs下面新建一个一个工程(记住不是Cocos项目!!!)C++文

今天总结一下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的简单使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存