iOS端Socket(二)ProtocolBuffer使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dolacmeng/article/details/81136635

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 = 10

        let textMessage = TextMessage.Builder()
        textMessage.user = try! userInfo.build()
        textMessage.text = message
        let msgData = (try! textMessage.build()).data()

        //1.获取消息长度
        var length = msgData.count

        //将消息长度写入data
        let headerData = Data(bytes:&length, count: 4)

        //发送消息
        let totalData = headerData + msgData
        self.sendMsg(data: totalData)
    }

五、读取消息

1、在HYSocket中添加方法startReadMsg:

func startReadMsg() {
        DispatchQueue.global().async {
            while true {
                 guard let lMsg = self.tcpClient.read(4) else{
                    continue
                 }
                //获取数据长度的data
                let 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.user
                print("来自" + (user?.name)! + "的消息:" + message.text)
            }
        }
    }

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

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

六、测试

发送消息,收到的是TextMessage:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/dolacmeng/article/details/81136635