static void ProcessAcceptResults(IAsyncResult ar) { AcceptInfo AI = (AcceptInfo)ar.AsyncState; Socket AcceptedSocket; try { AcceptedSocket = AI.ListeningSocket.EndAccept(ar); } catch (ObjectDisposedException) { // Listening socket was closed return; } catch (SocketException) { return; } SocketInfo SI = new SocketInfo(AcceptedSocket, AI); Console.Write("Successfully received a connection from "); Console.WriteLine(AcceptedSocket.RemoteEndPoint.ToString()); try { SI.s.BeginReceive(SI.Buffer, 0, SI.Buffer.Length, SocketFlags.None, SI.AsyncReceiveCallback, SI); } catch (SocketException) { SI.AI.RemoveSocket(SI.s); } try { AI.ListeningSocket.BeginAccept(AI.AcceptCallback, AI); } catch (SocketException) { return; } AddSocket(AcceptedSocket); }
private async void yield(AcceptInfo accept) { //TcpClient c; //c.GetStream().ReadAsync( var read = await accept.socketId.read(); // { read = { resultCode = 370 } } //Console.WriteLine(new { read = new { read.resultCode } }); var u = new Uint8ClampedArray(read.data, 0, (uint)read.data.byteLength); var input = Encoding.UTF8.GetString(u); new IHTMLPre { new { input } }.AttachToDocument(); // http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol var outputString = "HTTP/1.0 200 OK \r\nConnection: close\r\n\r\nhello world\r\n"; var xx = new Uint8ClampedArray( Encoding.UTF8.GetBytes( outputString ) ); //nn.Title = "before headers"; accept.socketId.write( xx.buffer ); accept.socketId.disconnect(); accept.socketId.destroy(); }
static void Main(string[] args) { int Port = ListeningPort; // Verify arguments if (args.Length < 1 || (args[0] != "IPv4" && args[0] != "IPv6")) { Console.WriteLine("Usage: TCPServer.exe <IPv4 | IPv6> [port]"); return; } if (args.Length >= 2) { Port = System.Convert.ToInt32(args[1].ToString()); } try { Socket ListeningSocket; if (args[0] == "IPv4") { // Create a new socket to listening for client connections. ListeningSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); // Setup a SOCKADDR_IN structure that will tell bind that we // want to listen for connections on all interfaces using port // 5150. IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Any, Port); ListeningSocket.Bind(LocalEndPoint); } else // IPv6 { // Create a new socket to listening for client connections. ListeningSocket = new Socket( AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.IP); IPv6EndPoint LocalEndPoint = new IPv6EndPoint(IPv6Address.Any, Port); ListeningSocket.Bind(LocalEndPoint); } ListeningSocket.Listen(5); Console.WriteLine("Server started - Press RETURN to stop the server."); Console.WriteLine("Awaiting socket connections..."); AcceptInfo AI = new AcceptInfo(ListeningSocket); for (int i = 0; i < MaxAsyncAccepts; i++) { AI.ListeningSocket.BeginAccept(AI.AcceptCallback, AI); } Console.ReadLine(); ListeningSocket.Close(); AI.RemoveAllSockets(); Console.WriteLine("Pending connections were closed - press RETURN to stop application"); Console.ReadLine(); } catch (SocketException err) { Console.WriteLine("Error: " + err.Message); } }
public SocketInfo(Socket NewSocket, AcceptInfo AI) { this.s = NewSocket; this.AI = AI; }