Hi Stephen,

It's quite possible that all you're missing is a cod.Flush() call in the 
sending code.
Looking at the documentation, I think we're missing the flush call there 
too, which suggests it's far too easy to do.
I've raised https://github.com/google/protobuf/issues/1282 to make sure we 
don't miss this.

Jon

On Thursday, 25 February 2016 17:41:35 UTC, Stephen LABBE wrote:
>
> Hi,
>
> I try to code a sample about protocol buffer over tcp.
> I launch a TCPListener and a TCPClient.
>
> I send with the TCP client and CodedOutputStream a message with some 
> parameters.
>
> But when I try to decode the message with CodedInputStream, I just have 
> the first parameter of my message.
> And the EmbeddedMessage is null
>
> Could you explain to me how to decode the entire message ?
>
> This is my listener code :
> public static void ListenerProto(string ip, int port) {
>             TcpListener server = null;
>             try {
>                 Console.WriteLine();
>
>                 IPAddress localAddr = IPAddress.Parse(ip);
>
>                 // TcpListener server = new TcpListener(port);
>                 server = new TcpListener(localAddr, port);
>
>                 // Start listening for client requests.
>                 server.Start();
>
>                 // Buffer for reading data
>                 byte[] bytes = new byte[10000];
>
>                 // Enter the listening loop.
>                 while (true) {
>                     Console.WriteLine("Waiting for a connection... ");
>
>                     // Perform a blocking call to accept requests.
>                     // You could also user server.AcceptSocket() here.
>                     TcpClient client = server.AcceptTcpClient();
>                     Console.WriteLine("Connected!");
>
>                     // Get a stream object for reading and writing
>                     NetworkStream stream = client.GetStream();
>
>                     CodedInputStream cod = new CodedInputStream(stream);
>                  
>                     var tcpMessage = TCPMessage.Parser.ParseFrom(cod);
>
>                     // Shutdown and end connection
>                     client.Close();
>                 }
>             }
>             catch (SocketException e) {
>                 Console.WriteLine($"SocketException: {e}");
>             }
>             finally {
>                 // Stop listening for new clients.
>                 server?.Stop();
>             }
>         }
>
> This is my send code
> public static void ClientProto(string ipServer, int port, TCPMessage 
> message) {
>             try {
>                 // Create a TcpClient.
>                 // Note, for this client to work you need to have a 
> TcpServer 
>                 // connected to the same address as specified by the 
> server, port
>                 // combination.
>                 TcpClient client = new TcpClient(ipServer, port);
>
>                 //Create stream
>                 var stream = client.GetStream();
>
>                 //Create Coded output stream to send data over the tcp 
> client
>                 CodedOutputStream cod = new CodedOutputStream(stream);
>
>                 // Send the message to the connected TcpServer. 
>                 //message.WriteTo(stream);
>                 var calculateSize = message.CalculateSize();
>
>                 message.WriteTo(cod);
>
>                 //Write message in tb
>                 Console.WriteLine($"Sent: {message}");
>
>                 // Close everything.
>                 stream.Close();
>                 client.Close();
>             }
>             catch (ArgumentNullException e) {
>                 Console.WriteLine($"ArgumentNullException: {e}");
>             }
>             catch (SocketException e) {
>                 Console.WriteLine($"SocketException: {e}");
>             }
>         }
>
> And finaly that is my proto message (simplify):
> syntax = "proto3";
>
> message TCPMessage {
> enum Type {
> Add = 0;
> Remove = 1;
> Select = 2;
> Update = 3;
> }
> message Parameter {
> string name = 1;
> string value = 2;
> }
> message EmbeddedMessage {
> string id = 1;
> Type type = 2;
> repeated Parameter parameters = 3;
> }
> Type commande = 1;
> EmbeddedMessage type = 2;
> }
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to