It looks like you are assuming that sends and receives on your TCP stream
will match up 1:1.  This isn't actually the case.  A TCP connection is a
stream of bytes, not packets.  A single read on the receiving end may
receive only part of a packet, or it may receive multiple packets.
So, you really need to write the size of your message first, then make sure
to read exactly that many bytes on the receiving end.

On Mon, Nov 10, 2008 at 12:51 PM, ChJees <[EMAIL PROTECTED]> wrote:

>
> It looked like this before i sent the data: (Debug)
> type: 14
> Login {
>  name: "Test"
>  password: "nil"
> }
>
> And i got this on the receiving end: (Debug)
> type: 14
> Login {
>  14 {
>  }
> }
>
> I can't figure out what in the world which could be changing data...
>
> Notice: I am using wxWidgets for UI and SFML for Networking.
>
> Here are the sending and recieving methods:
>
> //Server side
> this->TCP->Receive(this->TCPBuffer, sizeof( this->TCPBuffer ), this-
> >RecievedSize) //<- Is in a If structure
>
> net_protocol::NMessage RcvdMsg;
> std::string Tmp(this->TCPBuffer);
>
> RcvdMsg.ParseFromString( Tmp )
>
> //Client side
> net_protocol::NMessage Msg;
>  Msg.set_type( Network::MsgType::RECIEVE_LOGIN_INFO );
>
> net_protocol::LoginInfo *LoginInfos;
>   LoginInfos = Msg.mutable_login();
>
> LoginInfos->set_name( this->name->GetValue() );
> LoginInfos->set_password( this->password->GetValue() );
>
> std::string Tmp;
> Msg.SerializeToString(&Tmp);
>
> this->fParent->Socket.Send( Tmp.c_str(), sizeof( Tmp.c_str() ) );
>
> On 10 Nov, 20:40, Kenton Varda <[EMAIL PROTECTED]> wrote:
> > I don't see anything wrong with your code.  What kind of error are you
> > seeing?  Are you sure that the bytes you passed in to the parser on the
> > receiving end are exactly the same as what came out of the serializer on
> the
> > sending side?
> >
> > On Sun, Nov 9, 2008 at 6:40 AM, <[EMAIL PROTECTED]> wrote:
> >
> > > I wonder if there are any reasons to why this would fail to parse on
> > > the Server side of a game which a few friends me are making.
> >
> > > ||Protocol:
> >
> > > package net_protocol;
> >
> > > //Login Protocol 2
> > > message LoginInfo {
> > >        required string name = 1;
> > >        required string password = 2;
> > > }
> >
> > > //Message Protocol 3
> > > message ChatMessage {
> > >        required string name = 1;
> > >        required string body = 2;
> > > }
> >
> > > //The Protocol Main
> > > message NMessage {
> > >        required int32 type = 1;
> > >        optional LoginInfo type2 = 2;
> > >        optional ChatMessage type3 = 3;
> > > }
> >
> > > ||Code which sends the Protocol:
> > >      net_protocol::NMessage Msg;
> > >      Msg.set_type( Network::MsgType::RECIEVE_LOGIN_INFO );
> >
> > >    net_protocol::LoginInfo *LoginInfos;
> > >      LoginInfos = Msg.mutable_type2();
> > >      LoginInfos->set_name( this->name->GetValue().c_str() );
> > >      LoginInfos->set_password( this->password->GetValue().c_str() );
> > >      //Send away it here with some Network stuff
> >
> > > When the server gets that and tries to parse it so does it autofail.
> > > Just sending the NMessage without any optional structures work fine.
> >
> > > And the documentation are vague at it's best to describe how to use
> > > optional messages.
> >
> > > I would be grateful if someone could give me more insight on this :).
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to