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 Server3
- {
- public partial class Form1 : Form
- {
- private static Socket serverSocket;
- private const int PortNumber = 2000;
- private List<Socket> clientSockets;
- byte[] buffer = new byte[1024];
- public Form1()
- {
- InitializeComponent();
- serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- clientSockets = new List<Socket>();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- StartServer();
- }
- private void StartServer()
- {
- try
- {
- serverSocket.Bind(new IPEndPoint(IPAddress.Any, PortNumber));
- serverSocket.Listen(10);
- AddMessage("Server has been started");
- serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
- }
- catch (Exception)
- {
- AddMessage("Could not start server");
- }
- }
- private void StopServer()
- {
- foreach (Socket connection in clientSockets) connection.Close();
- ClearMessageList();
- serverSocket.Close();
- AddMessage("Server has been stopped");
- }
- public void AcceptCallback(IAsyncResult asyncResult)
- {
- Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- try
- {
- client = serverSocket.EndAccept(asyncResult);
- clientSockets.Add(client);
- AddMessage("Connected to a new client");
- client.BeginReceive(buffer, 0, 1024, 0, new AsyncCallback(ReceiveCallback), client);
- serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
- }
- catch (Exception)
- {
- client.Close();
- clientSockets.Remove(client);
- }
- }
- public void ReceiveCallback(IAsyncResult asyncResult)
- {
- Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- try
- {
- client = serverSocket.EndAccept(asyncResult);
- int bytesRead = client.EndReceive(asyncResult);
- string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
- if (bytesRead > 0)
- {
- AddMessage(message);
- foreach (Socket receiverClient in clientSockets) Send(receiverClient, message);
- }
- client.BeginReceive(buffer, 0, 1024, 0, new AsyncCallback(ReceiveCallback), client);
- }
- catch (Exception)
- {
- AddMessage("Disconnected from client");
- client.Close();
- clientSockets.Remove(client);
- }
- }
- private void Send(Socket client, string message)
- {
- byte[] data = Encoding.ASCII.GetBytes(message);
- client.Send(data);
- }
- private void AddMessage(string message)
- {
- messageList.Invoke((MethodInvoker)delegate ()
- {
- messageList.Items.Add(message);
- });
- }
- private void ClearMessageBox()
- {
- messageBox.Invoke((MethodInvoker)delegate ()
- {
- messageBox.Text = String.Empty;
- });
- }
- private void ClearMessageList()
- {
- messageList.Invoke((MethodInvoker)delegate ()
- {
- messageList.Items.Clear();
- });
- }
- private void SendButtonOnClick(object sender, EventArgs e)
- {
- string message = messageBox.Text;
- ClearMessageBox();
- AddMessage(message);
- foreach (Socket client in clientSockets) Send(client, message);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement