helios-io / helios

reactive socket middleware for .NET

Home Page:http://helios-io.github.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Wrong tcp packet content ?

OlinCamber opened this issue · comments

Hi,

I've discovered your work when I was looking for a framework to manage TCP transport on my application.

Using TimeService example I've created a small program which send data over tcp

Here the code of the startup:

            var host = IPAddress.Parse("192.168.0.72");
            var port = 7000;
            var bootstrapper = new ClientBootstrap().SetTransport(TransportType.Tcp).Build();

            client = bootstrapper.NewConnection(Node.Empty(), NodeBuilder.BuildNode().Host(host).WithPort(port));
            client.OnConnection += (address, connection) =>
            {
                Console.WriteLine("Confirmed connection with host.");
                connection.BeginReceive(ReceivedCallback);
            };
            client.OnDisconnection += (address, reason) => Console.WriteLine("Disconnected.");
            LoopConnect();
            Write();

and here concerning the Write method:

            var command = Encoding.ASCII.GetBytes("TEST");
            _client.Send(command, 0, command.Length, new EmptyNode());

My server receive the message. but with invalid characters at the beginning.
I've checked using wireshark the communication and the sent contains invalid chars at the beginning.

Here the Content in hex for my "TEST" message
04:00:00:00:54:45:53:54

How can I fix it ?

Thanks in advance !

Hi Olin!

The invalid characters at the beginning are from the https://github.com/helios-io/helios/blob/dev/src/Helios/Serialization/LengthFieldPrepender.cs - this is how we frame messages in Helios by default.

You can turn this off inside ClientBootstrap via the following:

 var bootstrapper = new ClientBootstrap().SetEncoder(new NoOpEncoder()).SetDecoder(new NoOpDecoder()).SetTransport(TransportType.Tcp).Build();

This will not perform any message framing by default, so you need to ensure that somewhere you are using message framing or your application will fail as soon as messages stop being of a fixed / consistent size.

Thanks a lot for the Help!
I will test or soon