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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to