我正在编写一个小应用程序,它需要通过 tcp 将 protobuf 消息发送到 netty 服务器,其中使用了 CocoaAsyncSocket/GCDAsyncSocket。
为此,我使用以下代码:
Message_LoginMessageRequest_Builder *msg_tmp_login_build=[Message_LoginMessageRequest builder];
[msg_tmp_login_build setPhoneNumber:input_phone.text];
[msg_tmp_login_build setEmail:input_email.text];
[msg_tmp_login_build setPassword:input_password.text];
Message_Builder *msg_tmp_build=[Message builder];
[msg_tmp_build setType:Message_MessageTypeLoginReq];
[msg_tmp_build setLoginRequest:msg_tmp_login_build.build];
// send the message to the socket: we need to code the stream first
Message *msg=[msg_tmp_build build];
NSMutableData *msg_data=[[NSMutableData alloc] initWithCapacity:[[msg data] length]];
PBCodedOutputStream *coded_output_stream=[PBCodedOutputStream streamWithData:msg_data];
[msg writeToCodedOutputStream:coded_output_stream];
[socket writeData:msg_data withTimeout:-1 tag:Message_MessageTypeLoginReq];
但是,代码总是在 writeToCodedOutputStream 中收到“out of space”错误,其中详细的跟踪信息为:writeToCodedOutputStream/writeEnum/writeTag/writeRawVariant32/writeRawByte/flush。
有什么帮助吗?谢谢!