public static void AddToSynReceived(TcpSegment request) { Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); sender.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1111)); try { var response = new TcpSegment(Config.ServerListenPort, request.sourcePort, syn: true, ack: true); sender.SendTo(response.ToByteArray(), new IPEndPoint(IPAddress.Parse(Config.host), request.sourcePort)); SynRecived.Add(request.sourcePort); Console.WriteLine($"{request.sourcePort} added to SynReceived"); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { sender.Close(); } if (SynRecived.Count > MaxSynRecived) { throw new Exception("SynReceived is overloaded"); } }
public static void AddToConnected(TcpSegment request) { Established.Add(request.sourcePort); SynRecived.Remove(request.sourcePort); Console.WriteLine($"{request.sourcePort} added to Connected"); if (Established.Count > MaxEstablished) { throw new Exception("Connected is overloaded"); } }
public static void Listener() { Console.WriteLine($"Сервер начал работу на {listenPoint.Address}:{listenPoint.Port}."); try { listenSocket.Bind(listenPoint); while (true) { byte[] data = new byte[1024]; int len = listenSocket.Receive(data); TcpSegment message = TcpSegment.FromByteArray(TcpSegment.GetBytes(data, len)); if (message.destinationPort != Config.ServerListenPort) { continue; } else if (Established.Contains(message.sourcePort)) { continue; } else if (SynRecived.Contains(message.sourcePort) && message.ack) { AddToConnected(message); } else if (!SynRecived.Contains(message.sourcePort) && message.syn) { AddToSynReceived(message); } } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.ResetColor(); } finally { listenSocket.Close(); } }
private static void Run() { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); try { socket.Bind(new IPEndPoint(IPAddress.Parse(Config.host), 6660)); for (int i = 0; i < count; i++) { TcpSegment tcp = new TcpSegment(6661 + i, Config.ServerListenPort, syn: true); socket.SendTo(tcp.ToByteArray(), server); byte[] data = new byte[1024]; Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); try { socket1.Bind(new IPEndPoint(IPAddress.Parse(Config.host), 6661 + i)); var count = socket1.Receive(data); var msg = TcpSegment.FromByteArray(TcpSegment.GetBytes(data, count)); var re = new TcpSegment(msg.destinationPort, msg.sourcePort, ack: true); socket1.SendTo(re.ToByteArray(), server); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { socket1.Close(); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { socket.Close(); } }
private static void Run() { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); try { socket.Bind(new IPEndPoint(IPAddress.Parse(Config.host), 6661)); for (int i = 0; i < count; i++) { TcpSegment tcp = new TcpSegment(6661 + i, Config.ServerListenPort, syn: true); socket.SendTo(tcp.ToByteArray(), new IPEndPoint(IPAddress.Parse(Config.host), Config.ServerListenPort)); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { socket.Close(); } }
public static void Run() { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); try { TcpSegment tcp = new TcpSegment(6661, Config.ServerListenPort, syn: true); socket.Bind(new IPEndPoint(IPAddress.Parse(Config.host), 6661)); for (int i = Config.ServerListenPort - 10; i <= Config.ServerListenPort; i++) { var point = new IPEndPoint(IPAddress.Parse(Config.host), Config.ServerListenPort); tcp.destinationPort = i; point.Port = i; socket.SendTo(tcp.ToByteArray(), point); } socket.Close(); socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.Bind(new IPEndPoint(IPAddress.Parse(Config.host), 6661)); byte[] data = new byte[1024]; int len = socket.Receive(data); var message = TcpSegment.FromByteArray(TcpSegment.GetBytes(data, len)); Console.WriteLine($"syn = {message.syn}, ack = {message.ack} on {message.sourcePort}."); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { socket.Close(); } }