unity3d 网页游戏可以实现javasocket编程实例通讯吗

我还是新手,JAVA、android、网路编程都没接触过。。。

老大给我个任务,让我把现有的jar的通讯库改成用C++写的,提供API给现在的unity3d游戏通信用。

我先大概了解了一些基础知识。现在好像是Unity3d->JNI->android jar这种层次结构,而且U3D也是可以调用dll的,那我想我只要把jar换成c++的DLL就行了把。。。

然后我就把jar反编译,看java的源代码打算把它翻译成C++的。。。

但是我现在还是很迷惑,我该用windows的socket头文件还是linux的呢?还是没啥区别?因为老大说这个通讯库以后还要用到IOS的游戏里。

我在想android是linux内核,应该调用unix的socket库吧,可是我是在windows环境用vc写的程序啊,调用unix库编译不了吧。。。哎,还是迷迷糊糊,只求大神们给我指点迷津

 之前服务端一直在VS中去做,考虑到后面客户端与服务器一体化,就把服务端也在unity中实现了,需要注意的一点是,由于服务端中包含阻塞方法,而unity所有脚本都只在仅存的一个主线程中运行,所以如果直接在start中调用启动服务器的方法,unity会直接卡死的,所以我们就自己起一个线程去搞服务端部分,unity中起线程后要清楚两点:

1、monoBehavior类中的方法尽量别用了,会出现不可预知的bug

2、自己起的线程,系统不会掺和,自己找个合适的地方再把他kill掉。

         下面的代码是在程序结束时杀掉线程,想起以前老谢给我讲的,起线程就像拉屎,完事一定要记得自己擦,系统不会给你擦,经测试不擦第二次启动unity会无响应。

这一次代码里简单实现了从客户端发送一个字符串的包到服务端,服务端接收后并打印出来,代码全部贴出来:

版权声明:本文为博主原创文章,未经博主允许不得转载。 /qq_/article/details/

    最近在研究网络同步,感觉很有意思。服务端与客户端都是用c#写的。很遗憾,现在的项目服务端都是用c++或者java写的。可能c#写出的效率不行?

    socket通信协议我们通过知道的两种。一种是TCP协议,一种是UDP协议。TCP是以传输数据稳定而夺得游戏开发者的垂爱。UDP因为容易掉数据导致对于精准数据的传输方面被坐冷板凳,但是UDP的优点是传输速度快,适用于工业展示类数据传输。丢几个数据无所谓,反正是要对整体数据走势分析。

    通常我们使用TCP协议。而TCP传输过程中会出现粘包分包问题。

    当我们高频率传输一些小的数据时,TCP协议会自动将这些小的数据打包在一起发送出去,产生了所谓的粘包问题。这是TCP的内部优化。

    当我们一次发送大量数据时,TCP会自动将数据切分多块然后分批次发送。

解决方法:我们在每次发送数据时,都要加上数据头。通常我们设定数据头为int32类型,占四个字节。数据头的内容表示我们发送的数据占了多少字节。这样我们对于粘包的数据,可以根据数据头对数据进行一步一步的解析读取。

首先我们需要创建一个message类来处理接收到的数据:

//用来存储接收到消息的数据 //开始往数组里添加数据的索引 因为可能存在分包的问题 所以startIndex不一定都是0 //有可能存在粘包 需要根据数据头来解析数据

//开始异步接收服务端发送过来的消息 我们需要创建一个message类来处理我们读取到的数据

在服务器端用来管理连接服务器的客户端的Client类:

//这里用来中断客户端的断连 不然服务端要一直报错 //这里用来中断客户端的断连 不然服务端要一直报错 }在项目架构上,我们通常不会只发送头数据加字符串数据,根据项目需要我们也要加上我们的请求模块和响应模块。希望本博客能帮到你!

我要回帖

更多关于 javasocket编程实例 的文章

 

随机推荐