Search code examples
c#socketsbinary-databinaryreader

Send a value by socket and read the value by reader.ReadInt32() changes value


I am trying to send a value by socket .So i have two parts in my project Client and server .

The client sends a value to server using this code :

           System.IO.BinaryWriter binaryWriter =
           new System.IO.BinaryWriter(networkStream);
           binaryWriter.Write(1);
           binaryWriter.Write(2);
           binaryWriter.Flush();

So in other part i need to read the two values i mean 1 and 2;

So in server part i have this code :

  static void Listeners()
        {

        Socket socketForClient = tcpListener.AcceptSocket();
        if (socketForClient.Connected)
        {
            NetworkStream networkStream = new NetworkStream(socketForClient);


            while (true)
            {
                  List<int> variables = new List<int>();
                using (var reader = new BinaryReader(networkStream))
                {
                    for (int i = 0; i < 2; i++)
                    {
                        int t = reader.ReadInt32();
                        variables.Add(t);
                    }
                }

      }
   }
}

As you can see i hold the values in variables list .but it doesn't work .i mean in server part i can't get the values 1 and 2 and my values is like this :841757955

best regards.


Solution

  • As far as I can tell from your code, you are sending data as a string in binary format, this will yield bytes for the characters 1,2.

    When you read the data back you try to get Int32 values.

    There are two options here:

    Read and write data as a string.

     Client code:
    
     binaryWriter.Write("1,2");
    
     Server code:
    
     string text = binaryReader.ReadString(); // "1,2"
    

    OR Read and write data as integers.

    Client code:
    
    binaryWriter.Write(10);
    binaryWriter.Write(20);
    
    Server code:
    
    int value1 = binaryReader.ReadInt32(); //10
    int value2 = binaryReader.ReadInt32(); //20