Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Net;
- using System.Net.Sockets;
- namespace WebSocketServer
- {
- class Program
- {
- static Server Server;
- static Thread ServerThread;
- static int Main(string[] args)
- {
- Console.WriteLine("Iniciando thread do servidor...");
- try
- {
- Server = new Server();
- ThreadStart ThreadEntry = new ThreadStart(Server.Entry);
- ServerThread = new Thread(ThreadEntry);
- ServerThread.Start();
- }
- catch (Exception E)
- {
- Console.WriteLine(E);
- return -1;
- }
- Console.WriteLine("Thread inicializado...\r\n\r\n* Precione qualquer tecla para finalizar o programa.\r\n");
- Console.ReadKey();
- ServerThread.Abort();
- return 0;
- }
- }
- class AsyncState
- {
- public Socket Connection;
- public byte[] Buffer = new byte[1024];
- public SocketError Error;
- public String DataReceived = "";
- public AsyncState(Socket Con)
- {
- Connection = Con;
- }
- public AsyncState() { }
- }
- class Server
- {
- Socket WebSocket;
- bool Next = true;
- public void Entry()
- {
- WebSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- WebSocket.Bind(new IPEndPoint(IPAddress.Loopback, 8000));
- WebSocket.Listen(10);
- while (true)
- {
- if (Next)
- {
- Console.WriteLine("Aguardando conexão remota...");
- WebSocket.BeginAccept(new AsyncCallback(HandleConnection), WebSocket);
- Next = false;
- }
- }
- }
- public void HandleConnection(IAsyncResult ar)
- {
- Socket Connection = WebSocket.EndAccept(ar);
- Console.WriteLine("Conectado a {0}\r\n", Connection.RemoteEndPoint);
- AsyncState State = new AsyncState(Connection);
- Connection.BeginReceive(State.Buffer, 0, State.Buffer.Length, SocketFlags.None, out State.Error, new AsyncCallback(Read), State);
- Next = true;
- }
- public void Read(IAsyncResult ar)
- {
- AsyncState State = (AsyncState)ar.AsyncState;
- int BytesReceived = State.Connection.EndReceive(ar);
- if (State.Connection.Connected)
- {
- String Data = Encoding.Default.GetString(State.Buffer, 0, BytesReceived);
- State.DataReceived += Data;
- Array.Clear(State.Buffer, 0, State.Buffer.Length);
- Console.WriteLine("\r\nDados recebidos de {0} ({1} bytes):", State.Connection.RemoteEndPoint, BytesReceived);
- Console.WriteLine("{0}", Data);
- State.Connection.BeginReceive(State.Buffer, 0, State.Buffer.Length, SocketFlags.None, out State.Error, new AsyncCallback(Read), State);
- }
- else
- {
- Console.WriteLine("\r\nConexão perdida com {0}\r\nTodos os dados recebidos:\r\n{1}", State.Connection.RemoteEndPoint, State.DataReceived);
- State.Connection.Close();
- return;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement