<< Click to Display Table of Contents >> Socket - um server e client simples |
![]() ![]() ![]() |
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();
}
}