Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Net;
- using System.Net.Sockets;
- namespace Bind_Server
- {
- public partial class Form1 : Form
- {
- private Socket server;
- //private Socket client;
- private byte[] data = new byte[1024];
- private int ConnectionNo;
- public Form1()
- {
- InitializeComponent();
- Control.CheckForIllegalCrossThreadCalls = false;
- }
- private void btnStart_Click(object sender, EventArgs e)
- {
- server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- int port;
- port = int.Parse(txtPort.Text);
- IPEndPoint localEP = new IPEndPoint(0, port);
- server.Bind(localEP);
- server.Listen(0);
- server.BeginAccept(new AsyncCallback(OnConnected), null);
- btnStart.Enabled = false;
- txtPort.Enabled = false;
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Bind Server: Online");
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Waiting for client .....");
- lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
- btnConnect1.PerformClick();
- btnConnect2.PerformClick();
- }
- void OnConnected(IAsyncResult result)
- {
- Socket client = server.EndAccept(result);
- server.BeginAccept(new AsyncCallback(OnConnected), null);
- try
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Connected to : " + client.RemoteEndPoint);
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Waiting for client .....");
- lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
- byte[] message = Encoding.ASCII.GetBytes("Welcome to my server");
- client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
- ConnectionNo++;
- txtConNo.Text = ConnectionNo.ToString();
- }
- catch (SocketException)
- {
- CloseClient(client);
- }
- }
- void OnDataSent(IAsyncResult result)
- {
- Socket client = (Socket)result.AsyncState;
- try
- {
- int sent = client.EndSend(result);
- client.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(OnDataReceived), client);
- }
- catch (SocketException)
- {
- CloseClient(client);
- }
- }
- void OnDataReceived(IAsyncResult result)
- {
- Socket client = (Socket)result.AsyncState;
- try
- {
- int receive = client.EndReceive(result);
- if (receive == 0)
- {
- CloseClient(client);
- return;
- }
- else
- {
- byte[] message;
- if (server1State == false && server2State == false)
- {
- try
- {
- message = Encoding.ASCII.GetBytes("No Server Connected - Unable to send: " + Encoding.ASCII.GetString(data, 0, receive));
- client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
- }
- catch
- {
- CloseClient(client);
- }
- }
- if (server1State == true) // If server one is connected
- {
- try
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Sending message to server 1: '" + Encoding.ASCII.GetString(data, 0, receive) + "', from client: " + client.RemoteEndPoint);
- message = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(data, 0, receive));
- serverLink1.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnServerDataSent1), client);
- }
- catch
- {
- CloseConnection1();
- try
- {
- message = Encoding.ASCII.GetBytes("Server 1 Failed to Connected - Unable to send: " + Encoding.ASCII.GetString(data, 0, receive));
- client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
- }
- catch
- {
- CloseClient(client);
- }
- }
- }
- if (server2State == true) // if server two is connected
- {
- try
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Sending message to server 2: '" + Encoding.ASCII.GetString(data, 0, receive) + "', from client: " + client.RemoteEndPoint);
- message = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(data, 0, receive));
- serverLink2.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnServerDataSent2), client);
- }
- catch
- {
- CloseConnection1();
- try
- {
- message = Encoding.ASCII.GetBytes("Server 2 Failed to Connected - Unable to send: " + Encoding.ASCII.GetString(data, 0, receive));
- client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(OnDataSent), client);
- }
- catch
- {
- CloseClient(client);
- }
- }
- }
- }
- lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
- }
- catch (SocketException)
- {
- CloseClient(client);
- }
- }
- public void CloseClient(Socket client)
- {
- try
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Client disconnected : " + client.RemoteEndPoint);
- }
- catch
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Client disconnected : Lost connection");
- }
- client.Close();
- server.BeginAccept(new AsyncCallback(OnConnected), null);
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Waiting for client ...");
- lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
- ConnectionNo--;
- txtConNo.Text = ConnectionNo.ToString();
- }
- private void btnExit_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- // Server Connect Section //
- private Socket serverLink1;
- private Socket serverLink2;
- private byte[] serverData1 = new byte[1024];
- private byte[] serverData2 = new byte[1024];
- private bool server1State;
- private bool server2State;
- private void btnConnect1_Click(object sender, EventArgs e)
- {
- try
- {
- btnConnect1.Enabled = false;
- btnDisconnect1.Enabled = true;
- txtPort1.Enabled = false;
- txtIP.Enabled = false;
- txtStatus2.Text = "Connecting to Server...";
- serverLink1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- int port;
- port = int.Parse(txtPort1.Text);
- IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(txtIP.Text), port);
- serverLink1.BeginConnect(remoteEP, new AsyncCallback(OnServerConnected1), null);
- }
- catch
- {
- CloseConnection1();
- }
- }
- private void btnConnect2_Click(object sender, EventArgs e)
- {
- try
- {
- btnConnect2.Enabled = false;
- btnDisconnect2.Enabled = true;
- txtPort2.Enabled = false;
- txtIP1.Enabled = false;
- txtStatus3.Text = "Connecting to Server...";
- serverLink2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- int port;
- port = int.Parse(txtPort2.Text);
- IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(txtIP1.Text), port);
- serverLink2.BeginConnect(remoteEP, new AsyncCallback(OnServerConnected2), null);
- }
- catch
- {
- CloseConnection2();
- }
- }
- // Server Connection Functions
- void OnServerConnected1(IAsyncResult result)
- {
- try
- {
- //Socket client = (Socket)result.AsyncState;
- serverLink1.EndConnect(result);
- txtStatus2.Text = "Connected to: " + serverLink1.RemoteEndPoint;
- serverLink1.BeginReceive(serverData1, 0, serverData1.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived1), null);
- server1State = true;
- }
- catch
- {
- CloseConnection1();
- }
- }
- void OnServerConnected2(IAsyncResult result)
- {
- try
- {
- //Socket client = (Socket)result.AsyncState;
- serverLink2.EndConnect(result);
- txtStatus3.Text = "Connected to: " + serverLink2.RemoteEndPoint;
- serverLink2.BeginReceive(serverData2, 0, serverData2.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived2), null);
- server2State = true;
- }
- catch
- {
- CloseConnection2();
- }
- }
- // Server 1 Send & Receive
- void OnServerDataReceived1(IAsyncResult result)
- {
- try
- {
- int receive = serverLink1.EndReceive(result);
- string message = Encoding.ASCII.GetString(serverData1, 0, receive);
- try
- {
- Socket clientNode = (Socket)result.AsyncState;
- if (lstStatus.SelectedItem.ToString() != DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message + ", for client: " + clientNode.RemoteEndPoint)
- {
- clientNode.BeginSend(serverData1, 0, receive, SocketFlags.None, new AsyncCallback(OnDataSent), clientNode);
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message + ", for client: " + clientNode.RemoteEndPoint);
- }
- else
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message + ", for client: " + clientNode.RemoteEndPoint + ", server 1 was ignored (too slow)");
- }
- }
- catch
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message);
- }
- lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
- }
- catch (Exception)
- {
- CloseConnection1();
- }
- }
- void OnServerDataSent1(IAsyncResult result)
- {
- Socket client = (Socket)result.AsyncState;
- try
- {
- int sent = serverLink1.EndSend(result);
- serverLink1.BeginReceive(serverData1, 0, serverData1.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived1), client);
- }
- catch
- {
- CloseConnection1();
- }
- }
- // Server 2 Send & Receive
- void OnServerDataReceived2(IAsyncResult result)
- {
- try
- {
- int receive = serverLink2.EndReceive(result);
- string message = Encoding.ASCII.GetString(serverData2, 0, receive);
- try
- {
- Socket clientNode = (Socket)result.AsyncState;
- // desync server 2 from server 1 to detect if server one has performed the task.
- if (server1State == true)
- {
- System.Threading.Thread.Sleep(1);
- }
- if (lstStatus.SelectedItem.ToString() != DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 1: " + message + ", for client: " + clientNode.RemoteEndPoint)
- {
- clientNode.BeginSend(serverData2, 0, receive, SocketFlags.None, new AsyncCallback(OnDataSent), clientNode);
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message + ", for client: " + clientNode.RemoteEndPoint);
- }
- else
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message + ", for client: " + clientNode.RemoteEndPoint + ", server 2 was ignored (too slow)");
- }
- }
- catch
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Recieved message from Server 2: " + message);
- }
- lstStatus.SelectedIndex = lstStatus.Items.Count - 1;
- }
- catch (Exception)
- {
- CloseConnection1();
- }
- }
- void OnServerDataSent2(IAsyncResult result)
- {
- Socket client = (Socket)result.AsyncState;
- try
- {
- int sent = serverLink2.EndSend(result);
- serverLink2.BeginReceive(serverData2, 0, serverData2.Length, SocketFlags.None, new AsyncCallback(OnServerDataReceived2), client);
- }
- catch
- {
- CloseConnection2();
- }
- }
- // Close server connections 1 & 2 functions
- public void CloseConnection1()
- {
- server1State = false;
- serverLink1.Close();
- txtStatus2.Text = "Disconnected...";
- btnConnect1.Enabled = true;
- btnDisconnect1.Enabled = false;
- txtPort1.Enabled = true;
- txtIP.Enabled = true;
- }
- public void CloseConnection2()
- {
- server2State = false;
- serverLink2.Close();
- txtStatus3.Text = "Disconnected...";
- btnConnect2.Enabled = true;
- btnDisconnect2.Enabled = false;
- txtPort2.Enabled = true;
- txtIP1.Enabled = true;
- }
- private void btnDisconnect1_Click(object sender, EventArgs e)
- {
- CloseConnection1();
- }
- private void btnDisconnect2_Click(object sender, EventArgs e)
- {
- CloseConnection2();
- }
- // Form load variables
- private void Form1_Load(object sender, EventArgs e)
- {
- lstStatus.Items.Add(DateTime.Now.ToString("HH:mm") + " - Bind Server: Offline");
- server1State = false;
- server2State = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement