展会信息港展会大全

Cocos2d-x中Socket的简单使用
来源:互联网   发布日期:2015-09-27 15:32:24   浏览:2122次  

导读: 今天总结一下Socket的使用方法吧,有在百度。。上面找到的(下面有百度的链接,写的不全的地方,大家可以看一下链接,)。。。如果哪位大神有更换的demo,求分享!!! Cocos2d-x中有关...

今天总结一下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

#include

#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,100,'\n');//获取一行数据,以‘\n’结束

int sendLenght = send(client_fd,sentData,100,0);

if (sendLenght == -1){

printf("send falid");

continue;

}

}

}

// 7 . close

closesocket(client_fd);

return 0;

}

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

下面是客户端:

ClientDemo.cpp

// ClientSocketDemo.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include

#include

#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 . 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,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. close

closesocket(socket_fd);

getchar();

return 0;

}

运行界面如图:

先启动Server ,在启动 client

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港