首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlatBuffers BufferHasIdentifier返回false

FlatBuffers BufferHasIdentifier返回false
EN

Stack Overflow用户
提问于 2016-02-19 10:02:46
回答 1查看 294关注 0票数 0

我试图通过传输数据,服务器是java,而客户端是C#,这使它变得非常复杂。

我使用的模式是:

代码语言:javascript
复制
namespace NetObjects;

union NetParameters { NetLogin, NetRegister }

table NetMessage {
  parameters:NetParameters;
}

table NetLogin{
    id: int;
    email:string;
    password:string;
}

table NetRegister{
    id: int;
    email:string;
    password:string;
}

root_type NetMessage;
file_identifier "MESG";

我是如何发送它的c#:

代码语言:javascript
复制
 FlatBufferBuilder fbb = new FlatBufferBuilder(1);

            String buffer = "EMAILCHE";
            StringOffset id = fbb.CreateString(buffer);
            StringOffset idd = fbb.CreateString("PasswordO?");

            NetLogin.StartNetLogin(fbb);
            NetLogin.AddEmail(fbb, id);
            NetLogin.AddPassword(fbb, idd);
            Offset<NetLogin> offset = NetLogin.EndNetLogin(fbb);

            NetMessage.StartNetMessage(fbb);

            NetMessage.AddParametersType(fbb, NetParameters.NetRegister);
            NetMessage.AddParameters(fbb, offset.Value);

            Offset<NetMessage> par = NetMessage.EndNetMessage(fbb);

            NetMessage.FinishNetMessageBuffer(fbb, par);

            _socket.Send(fbb.DataBuffer.Data, 0, fbb.DataBuffer.Data.Length, SocketFlags.None);

我如何接收它-- java:

代码语言:javascript
复制
DataInputStream in = new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
try (ByteArrayOutputStream os = new ByteArrayOutputStream())
                {
                    byte[] buffer = new byte[0xFFFF];

                    for (int len; (len = in.read(buffer)) != -1;) {
                        os.write(buffer, 0, len);
                        os.flush();
                        Handle(os.toByteArray());
                        System.out.println("Step: " + 4);
                    }
                }

手柄:

代码语言:javascript
复制
public void Handle(byte[] bytes){

        ByteBuffer bff = ByteBuffer.wrap(bytes);

        NetMessage.NetMessageBufferHasIdentifier(bff); // ALWAYS FALSE IS RETURNED

        NetMessage lg = NetMessage.getRootAsNetMessage(bff);

        System.out.println(lg.parametersType()); // 0 is returned
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-21 20:54:39

代码语言:javascript
复制
_socket.Send(fbb.DataBuffer.Data, fbb.Offset, fbb.DataBuffer.Data.Length,  SocketFlags.None);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35502458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档