Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- //using System.Net;
- using System.Net.Sockets;
- namespace uChatServer
- {
- class Program
- {
- List<NetworkStream> allClients = new List<NetworkStream>();
- class uChatAssync
- {
- Socket socket;
- byte[] buffer;
- NetworkStream networkStream;
- List<NetworkStream> allClients = new List<NetworkStream>();
- AsyncCallback callbackRead;
- AsyncCallback callbackWrite;
- public uChatAssync(Socket socketForClient, List<NetworkStream> list)
- {
- socket = socketForClient;
- buffer = new byte[256];
- networkStream = new NetworkStream(socketForClient);
- list.Add(networkStream);
- allClients = list;
- callbackRead = new AsyncCallback(this.OnReadComplete);
- callbackWrite = new AsyncCallback(this.OnWriteComplete);
- }
- public void StartRead()
- {
- networkStream.BeginRead(buffer, 0, buffer.Length, callbackRead, null);
- }
- private void OnReadComplete(IAsyncResult ar)
- {
- int bytesRead = networkStream.EndRead(ar);
- if (bytesRead > 0)
- {
- string s = System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead);
- Console.WriteLine("Recieved {0} bytes from client: {1}", bytesRead, s);
- networkStream.BeginWrite(buffer, 0, bytesRead, callbackWrite, null);
- for (int i = 0; i < allClients.Count; i++)
- {
- if (!allClients[i].Equals(networkStream))
- allClients[i].Write(buffer, 0, bytesRead);
- }
- }
- else
- {
- Console.WriteLine("Read connection dropped.");
- allClients.Remove(networkStream);
- networkStream.Close();
- socket.Close();
- networkStream = null;
- socket = null;
- }
- }
- private void OnWriteComplete(IAsyncResult ar)
- {
- networkStream.EndWrite(ar);
- Console.WriteLine("Write complete");
- networkStream.BeginRead(buffer, 0, buffer.Length, callbackRead, null);
- }
- }
- static void Main(string[] args)
- {
- Program app = new Program();
- app.Run();
- }
- private void Run()
- {
- TcpListener tcpListener = new TcpListener(65000);
- tcpListener.Start();
- for (; ; )
- {
- Socket socketForClient = tcpListener.AcceptSocket();
- if (socketForClient.Connected)
- {
- Console.WriteLine("Client connected!");
- uChatAssync handler = new uChatAssync(socketForClient, allClients);
- handler.StartRead();
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement