AddO1f

Seti_4_Server

Apr 2nd, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.44 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Threading;
  4. using System.Net.Sockets;
  5. using System.Net;
  6. using System.Text;
  7.  
  8. class Program
  9. {
  10.     static void Main(string[] args)
  11.     {
  12.         byte[] b = new byte[1024];
  13.  
  14.         IPHostEntry ipHost = Dns.GetHostEntry("localhost");
  15.         IPAddress ipAddr = ipHost.AddressList[1];
  16.         IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11320);
  17.  
  18.         Console.WriteLine("Сервер успешно загружен");
  19.         Console.WriteLine("Порт:" + ipEndPoint.Port);
  20.  
  21.         Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// создаем сокет
  22.         sListener.Bind(ipEndPoint);//  связываем сокет с точкой подключения
  23.         sListener.Listen(10);// запускаем прослушивание
  24.  
  25.         while (true)
  26.         {
  27.             Socket handler = sListener.Accept();
  28.             if (handler.Connected)
  29.             {
  30.                 // создаем объект обработчика для данного клиента
  31.                 Handler hand = new Handler(handler);
  32.                 // создаем поток – оболочку на метод Reader
  33.                 Thread mythread = new Thread(new ThreadStart(hand.Reader));
  34.                 // и запускаем поток
  35.                 mythread.Start();
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41. class Handler
  42. {
  43.     Socket clientSocket; // сокет для связи с клиентом
  44.     NetworkStream netStream; // сетевой поток
  45.     BinaryWriter binWriter;  // поток для записи
  46.     BinaryReader binReader;  // поток для чтения
  47.      
  48.     byte[] b = new byte[1024];
  49.     int bRec;
  50.     string data;
  51.     string name;
  52.  
  53.     public Handler(Socket clientSocket)
  54.     {
  55.         this.clientSocket = clientSocket;
  56.     }
  57.  
  58.     // Это метод для приема сообщений от клиента. Именно на  
  59.     // него мы и будем «навешивать» отдельный поток в классе  
  60.     // сервера
  61.  
  62.     public void Reader()
  63.     {
  64.         // создаем потоки для чтения-записи  
  65.         netStream = new NetworkStream(clientSocket);
  66.         binWriter = new BinaryWriter(netStream);
  67.         binReader = new BinaryReader(netStream);
  68.  
  69.         bRec = clientSocket.Receive(b);
  70.         name = Encoding.UTF8.GetString(b, 0, bRec);
  71.  
  72.         Console.WriteLine("---------------------------------");
  73.         Console.WriteLine("К чату подключился "+name);
  74.         Console.WriteLine("---------------------------------");
  75.  
  76.         while (true)
  77.         {
  78.             // здесь возникает пауза, пока клиент не пришлет очередное сообщение
  79.             bRec = clientSocket.Receive(b);
  80.             data = Encoding.UTF8.GetString(b, 0, bRec);
  81.             if (data=="end")
  82.             {
  83.                 // разрываем с ним соединение
  84.                 Console.WriteLine("---------------------------------");
  85.                 Console.WriteLine(name + " покинул чат");
  86.                 Console.WriteLine("---------------------------------");
  87.                 binWriter.Close();
  88.                 netStream.Close();
  89.                 break;
  90.             }
  91.             Console.WriteLine(name+": "+data);
  92.         }
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment