ProtocolBuffer使用

一、环境及ProtocolBuffer的安装

分别在终端执行以下命令:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"brew install protobuf-swift
brew install automake
brew install libtool
brew install protobuf

二、客户端通过cocoapods集成:

cocoapods比较完整的安装和使用方法可以参考:https://www.jianshu.com/p/dfe970588f95
1.cd到项目目录。如:

cd /Users/jackxu/Desktop/socketConnectDemo/socketConnectDemo/Client/

2.创建podfile文件:


pod init

3.打开podfile,编辑:


target 'Client' do
use_frameworks!
pod 'ProtocolBuffers-Swift'
end

4.终端执行:


pod install

5.打开Client.xcworkspace工程

三、ProtocolBuffer的使用

1、在项目中, 创建一个(或多个).proto文件
之后会通过该文件, 自动帮我们生成需要的源文件(比如C++生成.cpp源文件, 比如java生成.java源文件, Swift就生成.swift源文件)

2、

syntax = "proto2";message Person {required int64 id = 1;required string name = 2;optional string email = 3;
}message UserInfo {required string name = 1;required int64 level = 2;
}

3、代码编写完成后, 生成对应语言代码

protoc IMMessage.proto --swift_out="./"

四、使用ProtocolBuffer创建对象并发送

将上一篇(https://blog.csdn.net/dolacmeng/article/details/81085905)中HYSocket的sendMsg方法修改为:

func sendMsg(message: String) {let userInfo = UserInfo.Builder()userInfo.name = "Jack"userInfo.level = 10let textMessage = TextMessage.Builder()textMessage.user = try! userInfo.build()textMessage.text = messagelet msgData = (try! textMessage.build()).data()//1.获取消息长度var length = msgData.count//将消息长度写入datalet headerData = Data(bytes:&length, count: 4)//发送消息let totalData = headerData + msgDataself.sendMsg(data: totalData)}

五、读取消息

1、在HYSocket中添加方法startReadMsg:

func startReadMsg() {DispatchQueue.global().async {while true {guard let lMsg = self.tcpClient.read(4) else{continue}//获取数据长度的datalet lMsgData = Data(bytes: lMsg, count: 4)var length : Int = 0(lMsgData as NSData).getBytes(&length, length: 4)//根据长度读取消息guard let msg = self.tcpClient.read(length) else{return}let msgData  = Data(bytes: msg, count: length)let message = try! TextMessage.parseFrom(data: msgData)let user = message.userprint("来自" + (user?.name)! + "的消息:" + message.text)}}}

2、在连接成功后,调用startReadMsg方法

    //点击连接@IBAction func clickConnect(_ sender: UIButton) {if socket.connectServer() {print("连接上服务器")socket.startReadMsg()socket.sendMsg(message: "您好啊,服务器");}}

六、测试

发送消息,收到的是TextMessage:

iOS端Socket(二)ProtocolBuffer使用相关推荐

  1. iOS端Socket连接、发送数据(一)

    一.Socket的应用 IM即时通讯是通过Socket的方式实现长连接,可运用于 (1)直播聊天室.礼物 (2)微信.QQ等即时聊天 (3)游戏对话.技能等 二.SOCKET原理 套接字(socket ...

  2. IOS端二维码小工具

    JSbox是苹果IOS端的一个app,可以将JavaScript代码翻译成IOS端的原生程序,它的文档地址是https://docs.xteko.com/,但是在2020.10.03以后就停止更新了, ...

  3. Android布局之线性布局LinearLayout(二) ----简单模仿ios端小米计算器主界面UI

    Android布局之线性布局LinearLayout(二) ----简单模仿ios端小米计算器主界面UI   今天老师的要求是让用LinearLayout布局做自己手机自带的计算器的UI设计,因为io ...

  4. java(jfinal) 接入ios苹果内购(连续包月订阅),服务端将二次验证。

    大致流程: 1.ios端进行支付,然后收到苹果的一串数据(也叫收据),然后ios端将其转码为BASE64编码的字符串. 2.ios端请求服务端接口,将数据传给服务端,服务端拿到数据后,通过一系列处理后 ...

  5. iOS 端容器之 WKWebView 那些事

    简介: 本文主要是关于在端容器设计开发过程中,WKWebView 使用上遇到的一些问题和解决办法. 作者 | 驽良 来源 | 阿里技术公众号 一  背景 熟悉 iOS\macOS Hybrid 混合开 ...

  6. 服务端断开_Java多线程技术:实现多用户服务端Socket通信

    一.多用户服务器 多用户服务器是指服务器能同时支持多个用户并发访问服务器所提供的服务资源,如聊天服务.文件传输等. 上一篇的TCPServer是单用户版本,每次只能和一个用户对话.我们可以尝试多用户连 ...

  7. TCP/IP网络编程之多进程服务端(二)

    TCP/IP网络编程之多进程服务端(二) 信号处理 本章接上一章TCP/IP网络编程之多进程服务端(一),在上一章中,我们介绍了进程的创建和销毁,以及如何销毁僵尸进程.前面我们讲过,waitpid是非 ...

  8. html5的video在IOS端默认全屏和黑屏问题

    最近项目中需要使用video来代替有点复杂的动画(video循环自动播放),遇到了使用过程中的两个坑 ios端默认全屏解决办法 查阅资料说在在video标签加如下属性 <video webkit ...

  9. 美团开源Graver框架:用“雕刻”诠释iOS端UI界面的高效渲染

    Graver是一款高效的UI渲染框架,现已开源,它能以更低的资源消耗来构建十分流畅的UI界面. Graver 是一款高效的 UI 渲染框架,它以更低的资源消耗来构建十分流畅的 UI 界面.Graver ...

最新文章

  1. vue.js实战 第一篇 1-3章计算属性
  2. Adding Applications for JavaScript Storefronts in SAP 电商云
  3. 胆大,心黑,脸皮厚,某大佬透露的把妹绝招
  4. SAE实践——用SVN命令行同步/提交代码
  5. Hi,Let's Get Started,Mr Qu
  6. 深度学习笔记_评分函数/损失函数
  7. Atitit。如何实现dip, di ,ioc  ,Service Locator的区别于联系
  8. 基于弹性计算网络能力提升容器密度最佳实践
  9. php 获取文件名 行号,PHP – 找到文件中的字符串,然后显示它的行号
  10. 惠普网吧服务器型号,惠普增霸卡及相应功能之一
  11. 分支定界-附Python代码
  12. 腾讯会议 .wemta 文件如何转码成 mp4 文件
  13. 安利超实用的(cc协议)游戏3d模型素材网站
  14. IntelliJ IDEA 文件只读
  15. 征途私服mysql启动不了_征途服务器架设需要的LINUX版本
  16. 六大行业动向,给2021年新能源汽车行业画下句点
  17. 中国大学MOOC|C语言程序设计(浙江大学翁恺)|习题与解答
  18. 怎样快速将excel表格内容转换到word中
  19. 东京迪斯尼海洋乐园攻略_迪士尼乐园-软件工程师的观点
  20. 推荐十四款常见的Web前端开发框架

热门文章

  1. 实例 - 购物车 (列表、循环)
  2. [转]单点登录原理与简单实现
  3. 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因
  4. css中绝对定位中的left和top属性
  5. ref和out的区别
  6. 将网站程序放在tmpfs下
  7. php安装模式mod_php和Fastcgi的选择与对比
  8. C#中如何得到机器的IP地址
  9. 使用 Vml 制作立体柱状投票统计图的完整程序
  10. 以金山界面库(openkui)为例思考和分析界面库的设计和实现——问题