2017-06-02 9 views
0

Je dois envoyer et recevoir des octets de mon client au serveur via NetworkStream. Je sais comment communiquer avec les chaînes, mais maintenant je dois envoyer et recevoir des octets.Envoi et réception de byte [] dans l'application TCP client-serveur

Par exemple, quelque chose comme ça:

static byte[] Receive(NetworkStream netstr) 
{ 
    try 
    { 
     byte[] recv = new Byte[256]; 

     int bytes = netstr.Read(recv, 0, recv.Length); //(**This receives the data using the byte method**) 
     return recv; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error!\n" + ex.Message + "\n" + ex.StackTrace); 

     return null; 
    } 



} 

static void Send(NetworkStream netstr, byte[] message) 
{ 
    try 
    { 
     netstr.Write(message, 0, message.Length); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error!\n" + ex.Message + "\n" + ex.StackTrace); 
    } 
} 

Serveur:

 private void prejmi_click(object sender, EventArgs e) 
     { 
      const string IP = "127.0.0.1"; 
      const ushort PORT = 54321; 
      TcpListener listener = new TcpListener(IPAddress.Parse(IP), PORT); 
      listener.Start(); 
      TcpClient client = listener.AcceptTcpClient(); 
      NetworkStream ns = client.GetStream(); 

      byte[] data = Receive(ns) 

} 

Client:

 private void poslji_Click(object sender, EventArgs e) 
     { 
      const string IP = "127.0.0.1"; 
      const ushort PORT = 54321; 

      TcpClient client = new TcpClient(); 
      client.Connect(IP, PORT); 

      string test="hello"; 
      byte[] mybyte=Encoding.UTF8.GetBytes(test); 
      Send(ns,mybyte); 
} 

Mais ce n'est pas la façon de Propper à cela, parce que l'octet [ ] les données côté serveur auront toujours une longueur de 256.

+0

«car octet [] données sur le côté serveur auront toujours une longueur de 256 » - eh bien oui, mais la valeur de retour de l'appel 'read' vous indique combien d'octets ont été effectivement lu. Vous stockez cela dans la variable 'bytes', mais vous ne faites rien avec ... –

Répondre

1

Merci, Jon!

static byte[] Receive(NetworkStream netstr) 
     { 
      try 
      { 
       // Buffer to store the response bytes. 
       byte[] recv = new Byte[256]; 

       // Read the first batch of the TcpServer response bytes. 
       int bytes = netstr.Read(recv, 0, recv.Length); //(**This receives the data using the byte method**) 

       byte[] a = new byte[bytes]; 

       for(int i = 0; i < bytes; i++) 
       { 
        a[i] = recv[i]; 
       } 

       return a; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error!\n" + ex.Message + "\n" + ex.StackTrace); 

       return null; 
      } 

     } 

     static void Send(NetworkStream netstr, byte[] message) 
     { 
      try 
      { 
       //byte[] send = Encoding.UTF8.GetBytes(message.ToCharArray(), 0, message.Length); 
       netstr.Write(message, 0, message.Length); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error!\n" + ex.Message + "\n" + ex.StackTrace); 
      } 
     }