Guest User

Untitled

a guest
Nov 17th, 2016
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.23 KB | None | 0 0
  1. using ChatServer;
  2. using System;
  3. using System.Threading;
  4.  
  5. namespace ChatTCPServer
  6. {
  7.     class Program
  8.     {
  9.         static ServerObject server; // сервер
  10.         static Thread listenThread; // потока для прослушивания
  11.         static void Main(string[] args)
  12.         {
  13.             try
  14.             {
  15.                 server = new ServerObject();
  16.                 listenThread = new Thread(new ThreadStart(server.listen));
  17.                 listenThread.Start(); //старт потока
  18.             }
  19.             catch (Exception ex)
  20.             {
  21.                 server.disconnect();
  22.                 Console.WriteLine(ex.Message);
  23.             }
  24.         }
  25.     }
  26. }
  27.  
  28.     public class ServerObject
  29.     {
  30.         static TcpListener tcpListener; // сервер для прослушивания
  31.         List<ClientObject> clients = new List<ClientObject>(); // все подключения
  32.         int port = 12000;
  33.  
  34.         protected internal void addConnection(ClientObject clientObject)
  35.         {
  36.             clients.Add(clientObject);
  37.         }
  38.         protected internal void removeConnection(string id)
  39.         {
  40.             // получаем по id закрытое подключение
  41.             ClientObject client = clients.FirstOrDefault(c => c.Id == id);
  42.             // и удаляем его из списка подключений
  43.             if (client != null)
  44.                 clients.Remove(client);
  45.         }
  46.         // прослушивание входящих подключений
  47.         protected internal void listen()
  48.         {
  49.             try
  50.             {
  51.                 tcpListener = new TcpListener(IPAddress.Any, port);
  52.                 tcpListener.Start();
  53.                 Console.WriteLine("Сервер запущен. Ожидание подключений...");
  54.  
  55.                 while (true)
  56.                 {
  57.                     TcpClient tcpClient = tcpListener.AcceptTcpClient();
  58.  
  59.                     ClientObject clientObject = new ClientObject(tcpClient, this);
  60.                     Thread clientThread = new Thread(new ThreadStart(clientObject.process));
  61.                     clientThread.Start();
  62.                 }
  63.             }
  64.             catch (Exception ex)
  65.             {
  66.                 Console.WriteLine(ex.Message);
  67.                 disconnect();
  68.             }
  69.         }
  70.  
  71.         // трансляция сообщения подключенным клиентам
  72.         protected internal void broadcastMessage(string message, string id)
  73.         {
  74.             byte[] data = Encoding.Unicode.GetBytes(message);
  75.             for (int i = 0; i < clients.Count; i++)
  76.             {
  77.                 if (clients[i].Id != id) // если id клиента не равно id отправляющего
  78.                 {
  79.                     clients[i].Stream.Write(data, 0, data.Length); //передача данных
  80.                 }
  81.             }
  82.         }
  83.         // отключение всех клиентов
  84.         protected internal void disconnect()
  85.         {
  86.             tcpListener.Stop(); //остановка сервера
  87.  
  88.             for (int i = 0; i < clients.Count; i++)
  89.             {
  90.                 clients[i].close(); //отключение клиента
  91.             }
  92.             Environment.Exit(0); //завершение процесса
  93.         }
  94.     }
  95. using System;
  96. using System.Collections.Generic;
  97. using System.Linq;
  98. using System.Net.Sockets;
  99. using System.Net;
  100. using System.Text;
  101. using System.Threading;
  102.  
  103. namespace ChatServer
  104. {
  105.     public class ServerObject
  106.     {
  107.         static TcpListener tcpListener; // сервер для прослушивания
  108.         List<ClientObject> clients = new List<ClientObject>(); // все подключения
  109.         int port = 12000;
  110.  
  111.         protected internal void addConnection(ClientObject clientObject)
  112.         {
  113.             clients.Add(clientObject);
  114.         }
  115.         protected internal void removeConnection(string id)
  116.         {
  117.             // получаем по id закрытое подключение
  118.             ClientObject client = clients.FirstOrDefault(c => c.Id == id);
  119.             // и удаляем его из списка подключений
  120.             if (client != null)
  121.                 clients.Remove(client);
  122.         }
  123.         // прослушивание входящих подключений
  124.         protected internal void listen()
  125.         {
  126.             try
  127.             {
  128.                 tcpListener = new TcpListener(IPAddress.Any, port);
  129.                 tcpListener.Start();
  130.                 Console.WriteLine("Сервер запущен. Ожидание подключений...");
  131.  
  132.                 while (true)
  133.                 {
  134.                     TcpClient tcpClient = tcpListener.AcceptTcpClient();
  135.  
  136.                     ClientObject clientObject = new ClientObject(tcpClient, this);
  137.                     Thread clientThread = new Thread(new ThreadStart(clientObject.process));
  138.                     clientThread.Start();
  139.                 }
  140.             }
  141.             catch (Exception ex)
  142.             {
  143.                 Console.WriteLine(ex.Message);
  144.                 disconnect();
  145.             }
  146.         }
  147.  
  148.         // трансляция сообщения подключенным клиентам
  149.         protected internal void broadcastMessage(string message, string id)
  150.         {
  151.             byte[] data = Encoding.Unicode.GetBytes(message);
  152.             for (int i = 0; i < clients.Count; i++)
  153.             {
  154.                 if (clients[i].Id != id) // если id клиента не равно id отправляющего
  155.                 {
  156.                     clients[i].Stream.Write(data, 0, data.Length); //передача данных
  157.                 }
  158.             }
  159.         }
  160.         // отключение всех клиентов
  161.         protected internal void disconnect()
  162.         {
  163.             tcpListener.Stop(); //остановка сервера
  164.  
  165.             for (int i = 0; i < clients.Count; i++)
  166.             {
  167.                 clients[i].close(); //отключение клиента
  168.             }
  169.             Environment.Exit(0); //завершение процесса
  170.         }
  171.     }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment