Advertisement
Pavle_nis

Server

Apr 2nd, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.32 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using System.Net;
  12. using System.Net.Sockets;
  13.  
  14. namespace Server3
  15. {
  16.     public partial class Form1 : Form
  17.     {
  18.         private static Socket serverSocket;
  19.         private const int PortNumber = 2000;
  20.         private List<Socket> clientSockets;
  21.         byte[] buffer = new byte[1024];
  22.         public Form1()
  23.         {
  24.             InitializeComponent();
  25.             serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  26.             clientSockets = new List<Socket>();
  27.         }
  28.  
  29.         private void Form1_Load(object sender, EventArgs e)
  30.         {
  31.             StartServer();
  32.         }
  33.         private void StartServer()
  34.         {
  35.             try
  36.             {
  37.                 serverSocket.Bind(new IPEndPoint(IPAddress.Any, PortNumber));
  38.                 serverSocket.Listen(10);
  39.  
  40.                 AddMessage("Server has been started");
  41.  
  42.                 serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
  43.             }
  44.             catch (Exception)
  45.             {
  46.                 AddMessage("Could not start server");
  47.             }
  48.         }
  49.  
  50.         private void StopServer()
  51.         {
  52.             foreach (Socket connection in clientSockets) connection.Close();
  53.  
  54.             ClearMessageList();
  55.             serverSocket.Close();
  56.             AddMessage("Server has been stopped");
  57.         }
  58.  
  59.         public void AcceptCallback(IAsyncResult asyncResult)
  60.         {
  61.             Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  62.  
  63.             try
  64.             {
  65.                 client = serverSocket.EndAccept(asyncResult);
  66.  
  67.                 clientSockets.Add(client);
  68.  
  69.                 AddMessage("Connected to a new client");
  70.  
  71.                 client.BeginReceive(buffer, 0, 1024, 0, new AsyncCallback(ReceiveCallback), client);
  72.                 serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
  73.             }
  74.             catch (Exception)
  75.             {
  76.                 client.Close();
  77.                 clientSockets.Remove(client);
  78.             }
  79.         }
  80.  
  81.         public void ReceiveCallback(IAsyncResult asyncResult)
  82.         {
  83.             Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  84.  
  85.             try
  86.             {
  87.                 client = serverSocket.EndAccept(asyncResult);
  88.                 int bytesRead = client.EndReceive(asyncResult);
  89.                 string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
  90.                 if (bytesRead > 0)
  91.                 {
  92.                     AddMessage(message);
  93.                     foreach (Socket receiverClient in clientSockets) Send(receiverClient, message);
  94.                 }
  95.                 client.BeginReceive(buffer, 0, 1024, 0, new AsyncCallback(ReceiveCallback), client);
  96.             }
  97.             catch (Exception)
  98.             {
  99.                 AddMessage("Disconnected from client");
  100.  
  101.                 client.Close();
  102.                 clientSockets.Remove(client);
  103.             }
  104.         }
  105.  
  106.         private void Send(Socket client, string message)
  107.         {
  108.             byte[] data = Encoding.ASCII.GetBytes(message);
  109.  
  110.             client.Send(data);
  111.         }
  112.  
  113.         private void AddMessage(string message)
  114.         {
  115.             messageList.Invoke((MethodInvoker)delegate ()
  116.             {
  117.                 messageList.Items.Add(message);
  118.             });
  119.         }
  120.  
  121.         private void ClearMessageBox()
  122.         {
  123.             messageBox.Invoke((MethodInvoker)delegate ()
  124.             {
  125.                 messageBox.Text = String.Empty;
  126.             });
  127.         }
  128.         private void ClearMessageList()
  129.         {
  130.             messageList.Invoke((MethodInvoker)delegate ()
  131.             {
  132.                 messageList.Items.Clear();
  133.             });
  134.         }
  135.  
  136.         private void SendButtonOnClick(object sender, EventArgs e)
  137.         {
  138.             string message = messageBox.Text;
  139.             ClearMessageBox();
  140.             AddMessage(message);
  141.  
  142.             foreach (Socket client in clientSockets) Send(client, message);
  143.         }
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement