Guest User

Untitled

a guest
Jan 19th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4.  
  5. namespace chat100_sharp
  6. {
  7. class Session
  8. {
  9. public Session(Socket socket)
  10. {
  11. _socket = socket;
  12. }
  13.  
  14. public IAsyncResult DoRead()
  15. {
  16. return _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, HandleRead, null);
  17. }
  18.  
  19. public void HandleRead(IAsyncResult result)
  20. {
  21. var size = _socket.EndReceive(result);
  22. if (size > 0)
  23. {
  24. DoWrite(_buffer, 0, size);
  25. }
  26. else
  27. {
  28. _socket.Close();
  29. }
  30. }
  31.  
  32. public IAsyncResult DoWrite(byte[] buffer, int offset, int size)
  33. {
  34. return _socket.BeginSend(buffer, offset, size, SocketFlags.None, HandleWrite, size);
  35. }
  36.  
  37. public void HandleWrite(IAsyncResult result)
  38. {
  39. var sizeToWrite = (int)result.AsyncState;
  40. var written = _socket.EndSend(result);
  41. if (sizeToWrite > written)
  42. {
  43. DoWrite(_buffer, written, sizeToWrite - written);
  44. }
  45. else
  46. {
  47. DoRead();
  48. }
  49. }
  50.  
  51. private readonly Socket _socket;
  52. private readonly byte[] _buffer = new byte[4096];
  53. }
  54.  
  55. class Program
  56. {
  57. static void Main(string[] args)
  58. {
  59. var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
  60. socket.Bind(new IPEndPoint(IPAddress.Any, 12345));
  61. socket.Listen(100);
  62.  
  63. try
  64. {
  65. while (true)
  66. {
  67. var client = socket.Accept();
  68. new Session(client).DoRead();
  69. }
  70. }
  71. catch (Exception e) { Console.WriteLine(e.Message); }
  72. socket.Close();
  73. }
  74. }
  75. }
Add Comment
Please, Sign In to add comment