如何在unity中通过Socket使用supersocket protobuff

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
娄底职业学院 大专, 后参加湖南师大自考 本科,
要主从事虚拟仿真和三维动画工作
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
服务器端代码using Susing System.Collections.GponentMusing System.Dusing System.Dusing System.Lusing System.Tusing System.Windows.Fusing System.Nusing System.Net.Susing System.IO;using System.Tusing ProtoBusing ProtoBuf.Musing ClientMusing ServerMnamespace GameServer{& & public partial class Form1 : Form& & {& & & & public Form1()& & & & {& & & & & & InitializeComponent();& & & & }& & & & private void Form1_Load(object sender, EventArgs e)& & & & {& & & & & & TcpServer();& & & & }& & & & private static byte[]& & & & private const int port = 8885;& & & & private Socket serverS& & & & private Socket clientS& & & & public void TcpServer()& & & & {& & & & & & IPAddress ip = IPAddress.Parse("127.0.0.1");& & & & & & textBox1.Text += "本机IP地址:" +& & & & & & serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);& & & & & & serverSocket.Bind(new IPEndPoint(ip, port));& & & & & & serverSocket.Listen(10);&& & & & & & textBox1.Text += "开始监听端口:" +& & & & & & Thread threadAccept = new Thread(AcceptClientConnect);& & & & & & threadAccept.Start();& & & & }& & & & private void AcceptClientConnect()& & & & {& & & & & & clientSocket = serverSocket.Accept();& & & & & &&& & & & & & if (clientSocket != null)& & & & & & {& & & & & & & & SignUpResponse s = new SignUpResponse();& & & & & & & & s.errorCode = 0;& & & & & & & & s.version = 1;& & & & & & & & MemoryStream ms = new MemoryStream();& & & & & & & & ProtoBuf.Serializer.Serialize&SignUpResponse&(ms, s);& & & & & & & & result = ms.ToArray();& & & & & & & & ms.Close();& & & & & & & & clientSocket.Send(result,result.Length,SocketFlags.None);& & & & & & & & textBox1.Text +="长度:"+ result.L& & & & & & }& & & & }& & & & private void textBox1_TextChanged(object sender, EventArgs e)& & & & {& & & & }& & }}proto协议&package ServerMmessage SignUpResponse{ optional int32 errorCode = 1; optional float version = 2;}
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Unity3D传递ProtoBuf-net消息测试(转:AWNUXCVBN)',
blogAbstract:'proto协议客户端代码using UnityEusing System.Cusing System.Net.Susing System.IO;using System.Tusing Susing ProtoBusing System.Nusing ProtoBuf.Musing ClientMusing ServerMpublic class Client : MonoBehaviour{
private byte[] result = new byte[1024];
// Use this for initialization
void Start()
IPAddress ip = IPAddress.Parse(\"127.0.0.1\");',
blogTag:'',
blogUrl:'blog/static/85',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:5,
permalink:'blog/static/85',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'娄底职业学院 大专, 后参加湖南师大自考 本科,\n要主从事虚拟仿真和三维动画工作',
hmcon:'-1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}有大神用protobuf做网络通信协议的吗_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:65,893贴子:
有大神用protobuf做网络通信协议的吗收藏
c++服务器和c#客户端的交互总有问题,c#解析的时候,必须准确的知道一段byte数组里面填了多少个数据,很蛋疼,大神们是怎么解决的呢
火星时代unity3d,争当游戏大触,月薪过万小意思,手绘技能,概念设计,商业应用一步到位,你与u3d游戏特效设计师只差一步,赶快点击吧!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或在Unity5中使用Protobuf - 推酷
在Unity5中使用Protobuf
射击游戏项目开发笔记 (二)
由于很多的因素,项目改用U3D开发,而项目组目前为止没资深的Unity开发程序员,只能摸着石头过河了.我们网络通信数据使用protobuf的格式,(关于这protobuf的格式分析在上一篇笔记中已经分析得很详细了).简单说明一下目前项目的开发环境与插件的使用情况:
开发脚本: C# (.Net 2.0) 由于我与另一位同事均无C#功底,所以业余时间学习C#必不可少,本人而言已经有了基本的计划.(为什么不是JS 或者BOO,详细翻了一下Assets Unity 基本上大多插件都是用C#写的,Boo更加是第一次听)
开发工具:抛弃官方的Mono 使用VS2012,主要使用了UnityVS插件,注意这个插件现在已经免费了.
GUI:有UGUI与NGUI和GUI三个选择,目前选的是NGUI,主要原因是NGUI的教材网上一抓一大把,由于换引擎的突发性,已经没太多时间给我去看那个比较好用了.(很多事情总是充满无奈)
网络模块:Unity5 提供了一套Net组件,在我花了两天时间去看了它的几个组件之后,发现根本不足以满足我们项目的要求.所以决定使用.Net自带的Socket自己实现.(约莫花了三天的时间)
protobuf的使用
目前C#的库 在google code上有两个:
发现protobuf-net对跨平台的支持似乎略优于protobuf-csharp-port,在社区的评价也好一点,所以选用了protobuf-net.使用protobuf-net基本的步骤是:
编写proto文件
举个梨子,保存为demo.proto,message语法请自行学习
* message People {
required string name = 1;
required int32 id = 2;
required string email = 3;
使用protogen.exe生成C#源码文件
基本语法为
// -i: 指定proto文件 可以指定多个
// -o: 制定输出文件路径与文件名
// -ns: 指定源码命名空间,如果不设置则默认为proto的文件名为命名空间
// 若proto文件中有package XXX 参数,则强制命名空间名字为 XXX
protobuf-net\ProtoGen\protogen.exe -i:demo.proto -o:PBMessage\PBMessage.cs -ns:PBMessage
源文件生成DLL动态链接库
基本命令为:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn: /nostdlib+ /
errorreport:prompt /warn:4 /define:TRACE /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /
reference:protobuf-net.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /debug:pdbonly /
filealign:512 /optimize+ /out:obj\Release\PBMessage.dll /target:library /utf8output PBMessage.cs Properties\AssemblyInfo.cs
如果不想用命令行解决,也可以直接使用VS创建C#库项目,然后把源文件加到项目里,F5生成.在这一步中 得到PBMessage.dll(dll文件名可随意更改)AssemblyInfo.cs为版本信息文件,可在本文末的下载文件中找到,也可以自行创建一个
预编译序列化库 需要上一步得到的PBMessage.dll
protobuf-net\Precompile\precompile.exe PBMessage.dll -o:PBMessageSerializer.dll -t:PBMessageSerializer
经过前面的步骤之后,我们得到了三个DLL:
protobuf-net.dll 从protobuf-net工具包直接取出,根据不同平台而不同
PBMessage.dll 生成的动态链接库
PBMessageSerializer.dll 预编译序列化库
把这三个库放到 Unity项目的
Assets\Plugins\protobuf
文件夹下,如没这个文件夹则自行创建.到此就完成了全部配置工作,接下来是代码使用.方法如下:
* message People {
* required string name = 1;
* required int32 id = 2;
* required string email = 3;
public void WriteProtoBuf()
demo.People proto = new demo.People();
proto.email = &&;
proto.id = 10086;
proto.name = &Rect&;
using (MemoryStream ms = new MemoryStream())
new PBMessageSerializer().Serialize(ms, proto);
Byte[] pBuffer = ms.ToArray();
public void ReadProtoBuf(Byte[] pBuffer,int nSize)
if (null == pBuffer || 0 &= nSize)
// 反序列化
using (MemoryStream ms = new MemoryStream(pBuffer, 0, nSize))
demo.People proto =
new PBMessageSerializer().Deserialize(ms, null, typeof(demo.People)) as demo.P
代码非常简单.
整个过程被我整合成一个Bat命令:传送门,只需要把proto文件放到根目录,然后运行Build.bat批处理即可.最后的生成DLL在Bin目录中.
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致ProtobufaSocket unity 的一个 这个可以快速实现2D游戏项目开发 Other Games 其他
238万源代码下载-
&文件名称: ProtobufaSocket
& & & & &&]
&&所属分类:
&&开发工具: C#
&&文件大小: 12693 KB
&&上传时间:
&&下载次数: 3
&&提 供 者:
&详细说明:unity 的一个protobuf这个可以快速实现2D游戏项目开发-protobuf 通信的实现
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&Protobuf&Socket\Assembly-CSharp-vs.csproj&&...............\Assembly-CSharp.csproj&&...............\Assembly-CSharp.pidb&&...............\....ts\Plugins\Android\android.jar&&...............\......\.......\.......\AndroidManifest.xml&&...............\......\.......\.......\Compass.jar&&...............\......\.......\.......\res\drawable-hdpi\icon.png&&...............\......\.......\.......\...\.........ldpi\icon.png&&...............\......\.......\.......\...\.........mdpi\icon.png&&...............\......\.......\.......\...\values\strings.xml&&...............\......\.......\.......\src\CompassActivity$1.class&&...............\......\.......\.......\...\CompassActivity.class&&...............\......\.......\.......\...\CompassActivity.java&&...............\......\.......\Google.ProtocolBuffers.dll&&...............\......\.......\Google.ProtocolBuffers.Serialization.dll&&...............\......\.......\msg.proto&&...............\......\.......\unity\protobuf-net.dll&&...............\......\.......\.....\protobuf-net.pdb&&...............\......\.......\.....\protobuf-net.xml&&...............\......\Scenes\Main.unity&&...............\......\......\SocketTest.unity&&...............\......\..ripts\AddressBook.cs&&...............\......\.......\MyResponse.cs&&...............\......\.......\SocketClient.cs&&...............\......\.......\SocketController.cs&&...............\......\.......\SocketServer.cs&&...............\......\.......\SocketTest.cs&&...............\Library\AnnotationManager&&...............\.......\assetDatabase3&&...............\.......\AssetImportState&&...............\.......\AssetServerCacheV3&&...............\.......\AssetVersioning.db&&...............\.......\BuildPlayer.prefs&&...............\.......\BuildSettings.asset&&...............\.......\EditorUserBuildSettings.asset&&...............\.......\EditorUserSettings.asset&&...............\.......\expandedItems&&...............\.......\FailedAssetImports.txt&&...............\.......\guidmapper&&...............\.......\InspectorExpandedItems.asset&&...............\.......\metadata\00\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\..\&&...............\.......\........\.4\04ecb96c8b3ab41438ebdc3eca5f76b5&&...............\.......\........\10\10ffb094b87f575a0e308335&&...............\.......\........\.1\119b3cffa929b&&...............\.......\........\..\11cade929d7cdc47aced&&...............\.......\........\.4\14cf4a704f896d74cbb1&&...............\.......\........\.8\18c504cb1f043f946ac35ccb15ea3f27&&...............\.......\........\.c\1c639db76a7eedf&&...............\.......\........\26\266751ade1d03f24ebcd1fb82c72d26b&&...............\.......\........\.a\2a5ef6ecdc13aba622d7&&...............\.......\........\35\357eff3e7003e&&...............\.......\........\.e\3e78fe1bdd19e864ca22c0f7c0be9123&&...............\.......\........\47\f8e9a47b9bab0ea3c54cf8&&...............\.......\........\.a\4a9fb46bbda8e05c05c983&&...............\.......\........\54\54c50d2bba7be2e4c8d92b9b13b04d6a&&...............\.......\........\.6\b524ea3f5ac&&...............\.......\........\61\61f0af11e7ef1dc4d8fe10f4&&...............\.......\........\.2\620ec51cf6397bd93afa&&...............\.......\........\.8\68e6bc0390&&...............\.......\........\.f\6ff8364b9bba74f45b07b&&...............\.......\........\72\72f2d2b3b134e8549f58&&...............\.......\........\.4\b2ea&&...............\.......\........\.b\7b0e5c96ced7d194bbe2&&...............\.......\........\81\810dcc7ce0adee1e1ec0f68c&&...............\.......\........\.7\877b6a3abbb&&...............\.......\........\.9\b6a3c5003&&...............\.......\........\96\96e88b8aa059aab73422&&...............\.......\........\.c\9ce740bcd08d2dff2f929&&...............\.......\........\ad\ada13fbcd52cda640845c&&...............\.......\........\b6\b61def5b0d22ca&&...............\.......\........\c0\c0eb7cba66acaa&&...............\.......\........\.d\cdbe855a837b64&&...............\.......\........\d0\d0dccd7a75d926d159358f&&...............\.......\........\.1\d1a2b570d27d5a94d81aa93cd6e0ac8d&&...............\.......\........\ea\eade9bec19ded664597ffc5c6ce6633b&&...............\.......\........\.c\ecaf0d902c1a0f949b5b9c84b721816d&&...............\.......\........\.f\eff9ed0f6ae66e247bd4bb08b41cbde8&&...............\.......\........\f2\f2ab2c40b3de3&&...............\.......\........\.c\fc01a4cb5c151f6d94e021&&...............\.......\........\.d\fd55b69b29bb2f5438aed20c&&...............\.......\MonoManager.asset&&...............\.......\ProjectSettings.asset&&...............\.......\ScriptAssemblies\Assembly-CSharp.dll&&...............\.......\................\Assembly-CSharp.dll.mdb&&...............\.......\................\CompilationCompleted.txt&&...............\.......\ScriptMapper&&...............\obj\Debug\Assembly-CSharp-vs.csproj.FileListAbsolute.txt&&...............\...\.....\Assembly-CSharp-vs.csprojResolveAssemblyReference.cache
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - unity@球[褂玫牡囊恍┏淌酱a(新手在用的)
&[] - 3维动态光线图,编译环境D3D9,VC++6Unity3D(38)
在移动手机游戏开发中,目前Unity3D已成为比较主流的开发技术。
那么对于客户端服务器协议的打解包,我们有3中常用的处理方式:
1、自定义结构体:在协议中直接传输代码中自定义的结构体;这种方式的坏处是极大的增加了重复性的工作量,并且不能实现协议前后向兼容,可扩展性差;
2、json、xml等文本协议格式: 使用json、xml等文本协议作为协议格式;这种方式的好处是易于开发,方便协议前后向兼容和扩展,缺点是不能序列化,数据量大,浪费带宽;
3、推荐使用的方式: protobuf协议打解包方式;protobuf是google提出的一套开源协议,具有良好的前后向协议兼容性,易于扩展,并且具有很高的序列化和反序列化的效率,能极大的减小传输数据量的大小;
在Unity3D开发中,对于网络部分一般使用C#语言进行开发。一般推荐使用protobuf-net第三方库来进行开发。
但是不幸的是,其中使用到的JIT技术在Unity3D的IOS版本中是不能使用的,在序列化时会导致异常。
经过google网上搜索,找到一种不方便使用的解决方案如下:
但是该方案很复杂,非常不便于操作。
经过笔者自己的实验,探索出下面可用的一种解决方案:
1、从SVN上下载protbuf-net的源码:
http://protobuf-/svn/trunk/protobuf-net
2、将该目录中的所有C#源码拷贝到Unity3D中,直接使用源码而不是第三方dll;
3、此时在Unity中编译时,可能会报错说 unsafe不能使用;
4、采用如下方案可以解决: 在Assets目录下面新建&smcs.rsp文件,并在其中写入 &-unsafe&字符串,前后不加空格;
5、重新启动unity,此时我们可以发现该工程能够通过编译;
经验证,该方案在IOS设备上也是可用的。从而保证我们的protobuf能够应用在Unity移动开发中。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:42404次
排名:千里之外
转载:28篇
(1)(1)(1)(1)(4)(1)(1)(2)(1)(11)(18)

我要回帖

更多关于 websocket protobuf 的文章

 

随机推荐