`
buerkai
  • 浏览: 169568 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

cocos2d-x socket联网(JAVA socket做服务器)

 
阅读更多
需要引入ODSocket 类,见附件。

客户端代码如下:
ODSocket cSocket;
cSocket.Init();
cSocket.Create(AF_INET,SOCK_STREAM,0);
cSocket.Connect("192.168.8.145",9443);
char recvBuf[1024] = "\0";
std::string testmsg="adfasdf";
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
GBKToUTF8(testmsg,"gb2312","utf-8");
#endif
cSocket.Send(testmsg.c_str(),strlen(testmsg.c_str())+1,1);
cSocket.Recv(recvBuf,1024,0);
std::string rec_msg=std::string(recvBuf);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
GBKToUTF8(rec_msg,"utf-8","gb2312");
#endif
CCMessageBox(rec_msg.c_str(),"recived data is:");
cSocket.Close();
cSocket.Clean();



#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
//字符转换,使cocos2d-x在win32平台支持中文显示
int AppDelegate::GBKToUTF8(std::string &gbkStr,const char* toCode,const char* formCode)
{
iconv_t iconvH;
iconvH = iconv_open(formCode,toCode);
if(iconvH == 0)
{
return -1;
}

const char* strChar = gbkStr.c_str();
const char** pin = &strChar;

size_t strLength = gbkStr.length();
char* outbuf = (char*)malloc(strLength*4);
char* pBuff = outbuf;
memset(outbuf,0,strLength*4);
size_t outLength = strLength*4;
if(-1 == iconv(iconvH,pin,&strLength,&outbuf,&outLength))
{
iconv_close(iconvH);
return -1;
}

gbkStr = pBuff;
iconv_close(iconvH);
return 0;
}
#endif


服务端代码:
package com.game.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
* 主程序
*
* @author Administrator
*
*/
public class MainServer {

public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(9443);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("服务器开启..........");
while (true) {
try {
Socket so = ss.accept();
if (so == null) {
continue;
}
System.out.println("接受到一个请求。。。");
new DoSocket(so).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

}

////


package com.game.server;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

class DoSocket extends Thread {

private Socket so;
private DataInputStream dis;
private DataOutputStream dos;
private InputStream is;
private OutputStream os;

public DoSocket(Socket so) throws IOException {
this.so = so;
is=so.getInputStream();
os=so.getOutputStream();

}

@Override
public void run() {
while (true) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len=is.available();
byte[] buff=new byte[len];
System.out.println("len="+len);
is.read(buff);
out.write(buff, 0, len);
String read =new String(out.toByteArray(),"UTF-8");
System.out.println("接受到的信息:" + read);
String send = "您已经连接上了。";
os.write(send.getBytes("UTF-8"));
break;
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}

}

//
特别说明:
1.在服务端最好不要用datainputstream,C++代码发送的数据会是乱码。
2.在读流的时候,C++发送的数据,在读到最后一个数据后,流不会返回-1结束标志,所有我这里就没有用while循环来读流。
3.传说ODSocket这个类,已经实现了跨平台,不用第三方包,本人只在win32下测试通过,在android上没有测试。
分享到:
评论
4 楼 盛世哀伤 2013-07-19  
这段代码里面好像没有看见  大小端转换的代码?
这段代码能正常跑?
3 楼 buerkai 2012-12-29  
Meruiwen 写道
请问 楼主有没有源码

这个是很久前做的了,目前只有服务器的源码。在客户端部分,直接使用附件中的c++代码即可完成数据通信。
2 楼 Meruiwen 2012-12-20  
请问 楼主有没有源码
1 楼 Code4x 2012-11-08  
好东西, 收了, 试试去。

相关推荐

    用Cocos2d-x编写大富翁游戏源码,可联网

    在本文中,我们将深入探讨如何使用Cocos2d-x框架来开发一款类似大富翁的联网游戏。Cocos2d-x是一个广泛使用的开源游戏引擎,它支持多种平台,包括iOS、Android、Windows等,采用C++作为主要编程语言,同时提供了Lua...

    cocos2d_x之大富翁源码

    4. **网络通信**:联网功能涉及到服务器与客户端的通信,这部分可能使用了Cocos2d-x的网络模块或者第三方库如socket.io。通过分析网络通信的代码,可以了解游戏如何处理网络延迟、数据同步等问题。 5. **自定义联网...

    cocos2d iphone 中文开发资料大全

    9. **网络编程**:学习如何在Cocos2d-iPhone中集成网络功能,如HTTP请求、Socket通信,实现游戏的联网特性。 10. **IAP(In-App Purchase)**:理解如何在Cocos2d-iPhone游戏中实现内购功能,以提供付费内容或服务...

    植物大战僵尸

    《植物大战僵尸》是一款深受玩家喜爱的策略塔防游戏,基于Cocos2d-x游戏引擎开发,适用于手机平台。在这款游戏的设计与实现中,我们能够深入探讨多个IT领域的相关知识点。 首先,Cocos2d-x是游戏开发的重要工具,它...

    cocosCreator实时联网对战游戏《激流竞速》

    CocosCreator是Cocos2d-x团队推出的一款强大的2D游戏开发工具,它集成了完整的图形编辑器、资源管理、脚本系统以及发布流程,让开发者能够高效地创建跨平台的游戏。CocosCreator支持JavaScript和TypeScript语言,...

    【游戏】-SpaceBubble.7z

    在iOS平台上开发游戏,通常会使用Apple提供的游戏开发框架,如SpriteKit或Unity3D,或者第三方的Cocos2d-x等。《SpaceBubble》可能基于其中一种或多种技术实现,通过分析源代码,我们可以了解到这些框架的使用方法,...

    Android2.0游戏开发实战宝典源代码(第10章-第11章)

    2. **游戏引擎介绍**:可能会涵盖一些流行的游戏引擎,如Unity、Cocos2d-x或LibGDX,解释它们的特点、优点和适用场景。 3. **游戏架构设计**:介绍MVC(模型-视图-控制器)或其他游戏架构模式,以及如何在Android...

    Android游戏源码合集

    2. **游戏引擎**:很多Android游戏是基于游戏引擎开发的,例如Unity、Cocos2d-x、libGDX等。这些引擎提供了丰富的功能,如图形渲染、物理模拟、音频处理等,大大简化了游戏开发过程。熟悉一种或多种游戏引擎的使用是...

    android游戏代码

    1. **游戏引擎**:大多数Android游戏是基于游戏引擎开发的,如Unity、Cocos2d-x或Unreal Engine。这些引擎提供了游戏开发框架,简化了资源管理、场景构建、动画制作等工作,同时支持跨平台发布。例如,Unity以其强大...

    基于Android数独游戏设计.doc

    Android游戏开发可以使用多种游戏引擎,例如Apache Cocos2d,来实现游戏的逻辑和图形处理。 三、数独游戏设计 数独是一种逻辑游戏,玩家需要根据已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一...

Global site tag (gtag.js) - Google Analytics