Advertisement
Delta

Sockets

May 14th, 2011
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.48 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Net;
  7. using System.Net.Sockets;
  8.  
  9. namespace WebSocketServer
  10. {
  11.     class Program
  12.     {
  13.         static Server Server;
  14.         static Thread ServerThread;
  15.  
  16.         static int Main(string[] args)
  17.         {
  18.             Console.WriteLine("Iniciando thread do servidor...");
  19.  
  20.             try
  21.             {
  22.                 Server = new Server();
  23.                 ThreadStart ThreadEntry = new ThreadStart(Server.Entry);
  24.                 ServerThread = new Thread(ThreadEntry);
  25.                 ServerThread.Start();
  26.             }
  27.             catch (Exception E)
  28.             {
  29.                 Console.WriteLine(E);
  30.                 return -1;
  31.             }
  32.  
  33.             Console.WriteLine("Thread inicializado...\r\n\r\n* Precione qualquer tecla para finalizar o programa.\r\n");
  34.             Console.ReadKey();
  35.  
  36.             ServerThread.Abort();
  37.             return 0;
  38.         }
  39.     }
  40.  
  41.     class AsyncState
  42.     {
  43.         public Socket Connection;
  44.         public byte[] Buffer = new byte[1024];
  45.         public SocketError Error;
  46.         public String DataReceived = "";
  47.  
  48.         public AsyncState(Socket Con)
  49.         {
  50.             Connection = Con;
  51.         }
  52.  
  53.         public AsyncState() { }
  54.     }
  55.  
  56.     class Server
  57.     {
  58.         Socket WebSocket;
  59.         bool Next = true;
  60.  
  61.         public void Entry()
  62.         {
  63.             WebSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  64.             WebSocket.Bind(new IPEndPoint(IPAddress.Loopback, 8000));
  65.             WebSocket.Listen(10);
  66.  
  67.             while (true)
  68.             {
  69.                 if (Next)
  70.                 {
  71.                     Console.WriteLine("Aguardando conexão remota...");
  72.                     WebSocket.BeginAccept(new AsyncCallback(HandleConnection), WebSocket);
  73.                     Next = false;
  74.                 }
  75.             }
  76.         }
  77.  
  78.         public void HandleConnection(IAsyncResult ar)
  79.         {
  80.             Socket Connection = WebSocket.EndAccept(ar);
  81.             Console.WriteLine("Conectado a {0}\r\n", Connection.RemoteEndPoint);
  82.  
  83.             AsyncState State = new AsyncState(Connection);
  84.  
  85.             Connection.BeginReceive(State.Buffer, 0, State.Buffer.Length, SocketFlags.None, out State.Error, new AsyncCallback(Read), State);
  86.  
  87.             Next = true;
  88.         }
  89.  
  90.         public void Read(IAsyncResult ar)
  91.         {
  92.             AsyncState State = (AsyncState)ar.AsyncState;
  93.  
  94.             int BytesReceived = State.Connection.EndReceive(ar);
  95.  
  96.             if (State.Connection.Connected)
  97.             {
  98.                 String Data = Encoding.Default.GetString(State.Buffer, 0, BytesReceived);
  99.                 State.DataReceived += Data;
  100.                 Array.Clear(State.Buffer, 0, State.Buffer.Length);
  101.  
  102.                 Console.WriteLine("\r\nDados recebidos de {0} ({1} bytes):", State.Connection.RemoteEndPoint, BytesReceived);
  103.                 Console.WriteLine("{0}", Data);
  104.  
  105.                 State.Connection.BeginReceive(State.Buffer, 0, State.Buffer.Length, SocketFlags.None, out State.Error, new AsyncCallback(Read), State);
  106.             }
  107.             else
  108.             {
  109.                 Console.WriteLine("\r\nConexão perdida com {0}\r\nTodos os dados recebidos:\r\n{1}", State.Connection.RemoteEndPoint, State.DataReceived);
  110.                 State.Connection.Close();
  111.                 return;
  112.             }
  113.         }
  114.     }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement