public CoreComm() { // reading config for servers' parameters IamServer server1 = new IamServer("127.0.0.1", 1578); servers.Add(server1); IamServer server2 = new IamServer("127.0.0.1", 1579); servers.Add(server2); }
public void SendRequestToServer(IamServer server) { // Initialize socket between Proxy and Server P2SSocket = new TcpClient(); // Create connection between Proxy and Server P2SSocket.Connect(IPAddress.Parse(server.IP), server.Port); NetworkStream P2SStream = P2SSocket.GetStream(); StreamReader srP2S = new StreamReader(P2SStream); StreamWriter swP2S = new StreamWriter(P2SStream); StreamReader srC2P = new StreamReader(C2PStream); StreamWriter swC2P = new StreamWriter(C2PStream); // Get IP and port or client string clientIP = ((IPEndPoint)C2PSocket.Client.RemoteEndPoint).Address.ToString(); string clientPort = ((IPEndPoint)C2PSocket.Client.RemoteEndPoint).Port.ToString(); // Get IP and port or server string serverIP = ((IPEndPoint)P2SSocket.Client.RemoteEndPoint).Address.ToString(); string serverPort = ((IPEndPoint)P2SSocket.Client.RemoteEndPoint).Port.ToString(); // Response: * OK IMAP4rev1 Service Ready string response = srP2S.ReadLine(); swC2P.WriteLine(response); swC2P.Flush(); // Commands from client string msg = ""; while (P2SSocket.Connected) { try { // Read command from client msg = srC2P.ReadLine(); // Sudden disconnection from client if (msg == null) { break; } // Send Command to server swP2S.WriteLine(msg); swP2S.Flush(); var receiveBuffer = new byte[bufSize]; // Read response from server in bytes instead of sr.Readline var count = P2SStream.Read(receiveBuffer, 0, bufSize); response = Encoding.UTF8.GetString(receiveBuffer, 0, count); // Return client the server response swC2P.WriteLine(response.Trim()); swC2P.Flush(); // Commands with only tag if (msg.Split(' ').Length == 1) { continue; } // Client call logout command if ((msg.Split(' ')[1]).ToLower() == "logout") { break; } } catch { // Close streams srP2S.Dispose(); srP2S.Close(); swP2S.Dispose(); swP2S.Close(); srC2P.Dispose(); srC2P.Close(); swC2P.Dispose(); swC2P.Close(); break; } } // Shutdown and end connection Console.WriteLine(clientIP + " : " + clientPort + " disconnected"); C2PSocket.Close(); Console.WriteLine("Disconnect with server " + serverIP + " : " + serverPort); P2SSocket.Close(); // Close streams srP2S.Dispose(); srP2S.Close(); swP2S.Dispose(); swP2S.Close(); srC2P.Dispose(); srC2P.Close(); swC2P.Dispose(); swC2P.Close(); }