Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Net;
- using System.Net.Sockets;
- namespace chat100_sharp
- {
- class Session
- {
- public Session(Socket socket)
- {
- _socket = socket;
- }
- public IAsyncResult DoRead()
- {
- return _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, HandleRead, null);
- }
- public void HandleRead(IAsyncResult result)
- {
- var size = _socket.EndReceive(result);
- if (size > 0)
- {
- DoWrite(_buffer, 0, size);
- }
- else
- {
- _socket.Close();
- }
- }
- public IAsyncResult DoWrite(byte[] buffer, int offset, int size)
- {
- return _socket.BeginSend(buffer, offset, size, SocketFlags.None, HandleWrite, size);
- }
- public void HandleWrite(IAsyncResult result)
- {
- var sizeToWrite = (int)result.AsyncState;
- var written = _socket.EndSend(result);
- if (sizeToWrite > written)
- {
- DoWrite(_buffer, written, sizeToWrite - written);
- }
- else
- {
- DoRead();
- }
- }
- private readonly Socket _socket;
- private readonly byte[] _buffer = new byte[4096];
- }
- class Program
- {
- static void Main(string[] args)
- {
- var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
- socket.Bind(new IPEndPoint(IPAddress.Any, 12345));
- socket.Listen(100);
- try
- {
- while (true)
- {
- var client = socket.Accept();
- new Session(client).DoRead();
- }
- }
- catch (Exception e) { Console.WriteLine(e.Message); }
- socket.Close();
- }
- }
- }
Add Comment
Please, Sign In to add comment