Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Threading;
- using System.Net.Sockets;
- using System.Net;
- using System.Text;
- class Program
- {
- static void Main(string[] args)
- {
- byte[] b = new byte[1024];
- IPHostEntry ipHost = Dns.GetHostEntry("localhost");
- IPAddress ipAddr = ipHost.AddressList[1];
- IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11320);
- Console.WriteLine("Сервер успешно загружен");
- Console.WriteLine("Порт:" + ipEndPoint.Port);
- Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// создаем сокет
- sListener.Bind(ipEndPoint);// связываем сокет с точкой подключения
- sListener.Listen(10);// запускаем прослушивание
- while (true)
- {
- Socket handler = sListener.Accept();
- if (handler.Connected)
- {
- // создаем объект обработчика для данного клиента
- Handler hand = new Handler(handler);
- // создаем поток – оболочку на метод Reader
- Thread mythread = new Thread(new ThreadStart(hand.Reader));
- // и запускаем поток
- mythread.Start();
- }
- }
- }
- }
- class Handler
- {
- Socket clientSocket; // сокет для связи с клиентом
- NetworkStream netStream; // сетевой поток
- BinaryWriter binWriter; // поток для записи
- BinaryReader binReader; // поток для чтения
- byte[] b = new byte[1024];
- int bRec;
- string data;
- string name;
- public Handler(Socket clientSocket)
- {
- this.clientSocket = clientSocket;
- }
- // Это метод для приема сообщений от клиента. Именно на
- // него мы и будем «навешивать» отдельный поток в классе
- // сервера
- public void Reader()
- {
- // создаем потоки для чтения-записи
- netStream = new NetworkStream(clientSocket);
- binWriter = new BinaryWriter(netStream);
- binReader = new BinaryReader(netStream);
- bRec = clientSocket.Receive(b);
- name = Encoding.UTF8.GetString(b, 0, bRec);
- Console.WriteLine("---------------------------------");
- Console.WriteLine("К чату подключился "+name);
- Console.WriteLine("---------------------------------");
- while (true)
- {
- // здесь возникает пауза, пока клиент не пришлет очередное сообщение
- bRec = clientSocket.Receive(b);
- data = Encoding.UTF8.GetString(b, 0, bRec);
- if (data=="end")
- {
- // разрываем с ним соединение
- Console.WriteLine("---------------------------------");
- Console.WriteLine(name + " покинул чат");
- Console.WriteLine("---------------------------------");
- binWriter.Close();
- netStream.Close();
- break;
- }
- Console.WriteLine(name+": "+data);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment