Guest User

Untitled

a guest
Oct 18th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.61 KB | None | 0 0
  1. public static ManualResetEvent allDone = new ManualResetEvent(false);
  2.  
  3.  
  4. public void StartListening()
  5. {
  6. IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
  7. IPAddress ipAddress = ipHostInfo.AddressList[0];
  8. IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 10541);
  9.  
  10. Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  11.  
  12. try
  13. {
  14. listener.Bind(localEndPoint);
  15. listener.Listen(100);
  16.  
  17. while (true)
  18. {
  19. allDone.Reset();
  20. listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
  21. allDone.WaitOne();
  22. }
  23.  
  24. }
  25. catch (Exception e)
  26. {
  27. Console.WriteLine(e.ToString());
  28. }
  29. }
  30.  
  31. public void AcceptCallback(IAsyncResult ar)
  32. {
  33. allDone.Set();
  34.  
  35. Socket listener = (Socket)ar.AsyncState;
  36. Socket handler = listener.EndAccept(ar);
  37.  
  38. StateObject state = new StateObject();
  39. state.workSocket = handler;
  40. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
  41. }
  42.  
  43. public void ReadCallback(IAsyncResult ar)
  44. {
  45. String content = String.Empty;
  46. StateObject state = (StateObject)ar.AsyncState;
  47. Socket handler = state.workSocket;
  48.  
  49. int bytesRead = handler.EndReceive(ar);
  50.  
  51. if (bytesRead > 0)
  52. {
  53. state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
  54. content = state.sb.ToString();
  55. if (content.IndexOf("!_#|*-") > -1)
  56. {
  57. Send(handler, content.Substring(0, content.Length - 6));
  58. }
  59. else
  60. {
  61. handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
  62. }
  63. }
  64. }
  65.  
  66.  
  67. private void Send(Socket handler, String data)
  68. {
  69. CheckForIllegalCrossThreadCalls = false;
  70. Response response = new Response();
  71.  
  72.  
  73. byte[] byteData = Encoding.UTF8.GetBytes(data);
  74.  
  75. response = ParserToSocket(data);
  76.  
  77. if (response == null)
  78. {
  79. response = new Response();
  80. response.Status = "false";
  81. response.Message = "Json not valid" + data;
  82. }
  83. if (response.Status == null)
  84. response.Status = "false";
  85. if (response.Message == null)
  86. response.Message = "Error while creating response message";
  87.  
  88. byte[] ByteArrayToSend = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(response));
  89.  
  90. handler.BeginSend(ByteArrayToSend, 0, ByteArrayToSend.Length, 0, new AsyncCallback(SendCallback), handler);
  91.  
  92. }
  93.  
  94. private static void SendCallback(IAsyncResult ar)
  95. {
  96. try
  97. {
  98. Socket handler = (Socket)ar.AsyncState;
  99. int bytesSent = handler.EndSend(ar);
  100. handler.Shutdown(SocketShutdown.Both);
  101. handler.Close();
  102. }
  103. catch (Exception e)
  104. {
  105. Console.WriteLine(e.ToString());
  106. }
  107. }
  108.  
  109. private ManualResetEvent connectDone = new ManualResetEvent(false);
  110. private ManualResetEvent sendDone = new ManualResetEvent(false);
  111. private ManualResetEvent receiveDone = new ManualResetEvent(false);
  112.  
  113. private String response = String.Empty;
  114.  
  115. public string StartClient(string text)
  116. {
  117. try
  118. {
  119. text += "!_#|*-";
  120.  
  121. IPHostEntry ipHostInfo = Dns.GetHostEntry("127.0.0.1");
  122. IPAddress ipAddress = ipHostInfo.AddressList[0];
  123. IPEndPoint remoteEP = new IPEndPoint(ipAddress, 10541);
  124.  
  125. Socket client = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  126.  
  127. client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
  128. connectDone.WaitOne();
  129.  
  130. Send(client, text);
  131. sendDone.WaitOne();
  132.  
  133. Receive(client);
  134. receiveDone.WaitOne();
  135.  
  136. client.Shutdown(SocketShutdown.Both);
  137. client.Close();
  138.  
  139.  
  140. response = response.Replace("!_#|*-", "");
  141.  
  142. return response;
  143. }
  144. catch (Exception e)
  145. {
  146. Console.WriteLine("CLIENT ERROR : n"+e.ToString());
  147. return null;
  148. }
  149. }
  150.  
  151. private void ConnectCallback(IAsyncResult ar)
  152. {
  153. try
  154. {
  155. Socket client = (Socket)ar.AsyncState;
  156. client.EndConnect(ar);
  157. connectDone.Set();
  158. }
  159. catch (Exception e)
  160. {
  161. Console.WriteLine(e.ToString());
  162. }
  163. }
  164.  
  165. private void Receive(Socket client)
  166. {
  167. try
  168. {
  169. StateObject state = new StateObject();
  170. state.workSocket = client;
  171. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
  172. }
  173. catch (Exception e)
  174. {
  175. Console.WriteLine(e.ToString());
  176. }
  177. }
  178.  
  179. private void ReceiveCallback(IAsyncResult ar)
  180. {
  181. try
  182. {
  183. StateObject state = (StateObject)ar.AsyncState;
  184. Socket client = state.workSocket;
  185. int bytesRead = client.EndReceive(ar);
  186.  
  187. if (bytesRead > 0)
  188. {
  189. state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead));
  190.  
  191. response = state.sb.ToString();
  192.  
  193. if(response.IndexOf("!_#|*-") != -1)
  194. {
  195. state.sb.Clear();
  196. receiveDone.Set();
  197. }
  198. else
  199. {
  200. client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
  201. }
  202.  
  203. }
  204. else
  205. {
  206. if (state.sb.Length > 1)
  207. {
  208. response = state.sb.ToString();
  209. }
  210.  
  211. receiveDone.Set();
  212. client.EndReceive(ar);
  213. }
  214. }
  215. catch (Exception e)
  216. {
  217. Console.WriteLine(e.ToString());
  218. }
  219. }
  220.  
  221. private void Send(Socket client, String data)
  222. {
  223.  
  224. byte[] byteData = Encoding.UTF8.GetBytes(data);
  225. client.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), client);
  226. }
  227.  
  228. private void SendCallback(IAsyncResult ar)
  229. {
  230. try
  231. {
  232. Socket client = (Socket)ar.AsyncState;
  233. int bytesSent = client.EndSend(ar);
  234. sendDone.Set();
  235. }
  236. catch (Exception e)
  237. {
  238. Console.WriteLine(e.ToString());
  239. }
  240. }
Add Comment
Please, Sign In to add comment