Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.20 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. //using System.Net;
  6. using System.Net.Sockets;
  7.  
  8. namespace uChatServer
  9. {
  10.     class Program
  11.     {
  12.         List<NetworkStream> allClients = new List<NetworkStream>();
  13.         class uChatAssync
  14.         {
  15.             Socket socket;
  16.             byte[] buffer;
  17.             NetworkStream networkStream;
  18.             List<NetworkStream> allClients = new List<NetworkStream>();
  19.             AsyncCallback callbackRead;
  20.             AsyncCallback callbackWrite;
  21.  
  22.  
  23.             public uChatAssync(Socket socketForClient, List<NetworkStream> list)
  24.             {
  25.                 socket = socketForClient;
  26.                 buffer = new byte[256];
  27.                 networkStream = new NetworkStream(socketForClient);
  28.                 list.Add(networkStream);
  29.                 allClients = list;
  30.                 callbackRead = new AsyncCallback(this.OnReadComplete);
  31.                 callbackWrite = new AsyncCallback(this.OnWriteComplete);
  32.  
  33.             }
  34.  
  35.             public void StartRead()
  36.             {
  37.                 networkStream.BeginRead(buffer, 0, buffer.Length, callbackRead, null);
  38.             }
  39.  
  40.             private void OnReadComplete(IAsyncResult ar)
  41.             {
  42.                 int bytesRead = networkStream.EndRead(ar);
  43.  
  44.                 if (bytesRead > 0)
  45.                 {
  46.                     string s = System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead);
  47.                     Console.WriteLine("Recieved {0} bytes from client: {1}", bytesRead, s);
  48.                     networkStream.BeginWrite(buffer, 0, bytesRead, callbackWrite, null);
  49.                     for (int i = 0; i < allClients.Count; i++)
  50.                     {
  51.                         if (!allClients[i].Equals(networkStream))
  52.                             allClients[i].Write(buffer, 0, bytesRead);
  53.                     }
  54.  
  55.                 }
  56.                 else
  57.                 {
  58.                     Console.WriteLine("Read connection dropped.");
  59.                     allClients.Remove(networkStream);
  60.                     networkStream.Close();
  61.                     socket.Close();
  62.                     networkStream = null;
  63.                     socket = null;
  64.                 }
  65.             }
  66.  
  67.             private void OnWriteComplete(IAsyncResult ar)
  68.             {
  69.                 networkStream.EndWrite(ar);
  70.                 Console.WriteLine("Write complete");
  71.                 networkStream.BeginRead(buffer, 0, buffer.Length, callbackRead, null);
  72.             }
  73.         }
  74.         static void Main(string[] args)
  75.         {
  76.             Program app = new Program();
  77.             app.Run();
  78.         }
  79.  
  80.         private void Run()
  81.         {
  82.             TcpListener tcpListener = new TcpListener(65000);
  83.             tcpListener.Start();
  84.             for (; ; )
  85.             {
  86.                 Socket socketForClient = tcpListener.AcceptSocket();
  87.                 if (socketForClient.Connected)
  88.                 {
  89.                     Console.WriteLine("Client connected!");
  90.                     uChatAssync handler = new uChatAssync(socketForClient, allClients);
  91.                     handler.StartRead();
  92.                 }
  93.             }
  94.         }
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement