Socket - um server e client simples

<< Click to Display Table of Contents >>

Navigation:  Outros >

Socket - um server e client simples

Previous pageReturn to chapter overviewNext page

Server.cs

 

using System;

using System.Text;

using System.Net.Sockets;

 

class Program

{

  static void Main(string[] args)

   {

      // cria um listenet que será o server (parâmetro é a porta)

      TcpListener serverSocket = new TcpListener(8888);

 

      int requestCount = 0;

 

      // cria o socket para responder

      TcpClient clientSocket = default(TcpClient);

       serverSocket.Start();

 

      Console.WriteLine(" >> Servidor iniciado");

 

      // socket para resposta

       clientSocket = serverSocket.AcceptTcpClient();

      Console.WriteLine(" >> Aceitando conexões de clients remotos");

       requestCount = 0;

 

      while ((true))

       {

          try

           {

               requestCount = requestCount + 1;

 

              // obtem o stream de entrada

              NetworkStream networkStream = clientSocket.GetStream();

              byte[] bytesFrom = new byte[10025];

 

              // lê

               networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);

              string dataFromClient = Encoding.ASCII.GetString(bytesFrom);

 

              // pega só a parte que interessa (até o \0) --- pode-se criar um delimitador para facilitar o trabalho

               dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf('\0'));

 

              Console.WriteLine(" >> Recebi do client: *" + dataFromClient + "*");

 

              // envia resposta pro client

              string serverResponse = "Enviado para client como resposta: " + Convert.ToString(requestCount);

              Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse);

               networkStream.Write(sendBytes, 0, sendBytes.Length);

               networkStream.Flush();

 

              Console.WriteLine(" >> " + serverResponse);

           }

          catch (Exception ex)

           {

              Console.WriteLine(ex.ToString());

           }

       }

 

      // fecha tudo

       clientSocket.Close();

       serverSocket.Stop();

      Console.WriteLine(" >> fim");

      Console.ReadLine();

   }

}

 


 

Client.cs

 

using System;

using System.Text;

using System.Net.Sockets;

 

class Program

{

  static void Main(string[] args)

   {

      // cria o componente socket

      TcpClient clientSocket = new TcpClient();

 

      Console.WriteLine("conectando...");

       clientSocket.Connect("127.0.0.1", 8888); // IP, porta

 

      // cria um stream para envio para o servidor (bytes)

      NetworkStream serverStream = clientSocket.GetStream();

 

      // aqui transforma uma string num byte[] (observe que no final tem um \n)

      byte[] outStream = Encoding.ASCII.GetBytes("9020122000004CC3800E000000000001030311165200012328000\n");

 

      Console.WriteLine("enviando dados via socket...");

 

       serverStream.Write(outStream, 0, outStream.Length);

       serverStream.Flush();

 

      // agora lê a resposta...

      Console.WriteLine("lendo resposta...");

 

      byte[] inStream = new byte[10025];

       serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);

      string returndata = Encoding.ASCII.GetString(inStream);

 

      // copia a resposta só até o primeiro \0

       returndata = returndata.Substring(0, returndata.IndexOf('\0'));

 

      // exibe

      Console.WriteLine("recebi do servidor:*" + returndata.Trim() + "*");

      Console.ReadLine();

   }

}