title: How to design TCP datagram and send data？
body: <p>Hi all，I have the server ip and port number,and then I want to use Socket TcpClient object to connet the server to send and receive data,But I don't konw how to customize the tcp-ip datagram.</p>
  
  <p>Here is the describe of packet </p>
  
  <pre><code>name                  bit         datatype
  sync_tag              16          uint（16）    const：0xAA 0x55
  version               8           uint（8）     const：0x01
  packet_length         16          uint（16）    ?
  payload_id            8           uint（8）     0x01,0x02,0x03,0x04...（now it is 0x01）
  for(int i=0;i&lt;length-8;i++){
  payload_data          8           byte(1)      ?
  }                                   
  CRC16                 16          uint（16）    ?
  </code></pre>
  
  <p>packet_length:from the first byte of sync_tag to the last byte CRC16
  payload_data :Now the structure like below</p>
  
  <pre><code>syntax           bit      datatype   
  username         264      char(33)
  password         264      char(33)
  </code></pre>
  
  <p>Is this any way to konw what is the "length-8" and and how to calculate the packet_length?
  Finally I will send byte[] by using TcpClient and NetwordStream? </p>
  
  <pre><code>    &gt;here is the codes I attempt to write
      &gt;I don't know how to send the packet
      [1]: chinafilm.org.cn/uploads/soft/140117/2_1140448191.pdf  
      public static void TestTcpClient()
      {
          TcpClient client = new TcpClient("58.62.144.227", 18080);
          NetworkStream stream = client.GetStream();
          client.LingerState = new LingerOption(true, 30);
          if (!client.Connected)
          {
              Console.WriteLine("Connect Error!");
              return;
          }
          byte[] buffer = new byte[1024];
          //I don't konw what is packet_length,so packetlength is a test sample
          byte[] packetlength = new byte[2];
          //Like packetlength,It is a test sample;
          byte payloadData = byte.MinValue;
          //CRC16 algorithm,I can find some example 
          byte[] crc16 = new byte[2];
          buffer[0] = 0xAA; //sync_tag;
          buffer[1] = 0x55;
          buffer[2] = 0x01; //versin
          buffer[3] = packetlength[0]; //packet_length;
          buffer[4] = packetlength[1];
          buffer[5] = 0x01; //payload_id : If I use the username and password,It is 0x01
          buffer[6] = payloadData;//Contains username and password
          buffer[7] = crc16[0];
          buffer[8] = crc16[1];
          stream.Write(buffer, 0, buffer.Length);
          // Buffer to store the response bytes.
          byte[] data = new Byte[256];
          // String to store the response ASCII representation.
          String responseData = String.Empty;
          // Read the first batch of the TcpServer response bytes.
          Int32 bytes = stream.Read(data, 0, data.Length);
          responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
          Console.WriteLine("Received: {0}", responseData);
          // Close everything.
          stream.Close();
          client.Close();
      }
  </code></pre>