public void RequestResponse() { _server.Start(); var client = new AsyncClientArgs(BufferSize); client.AcceptSocket = new Socket(SocketType.Dgram, ProtocolType.Udp); for (var i = 0; i < 100; i++) { var message = "Request" + i; client.UTF8Message = message; client.AcceptSocket.SendTo(client.Buffer, _ipEndPoint); client.UTF8Message = null; client.AcceptSocket.ReceiveFrom(client.Buffer, ref _emptyEndPoint); Assert.AreEqual(message, client.UTF8Message); } _server.Stop(); }
private void ProcessSend(AsyncClientArgs args) { if (args.SocketError == SocketError.Success) { Log.Debug("{0} < {1}", args.AcceptSocket.RemoteEndPoint, args.UTF8Message); } else { Log.Error("{0} < {1}", args.AcceptSocket.RemoteEndPoint, args.SocketError); } CloseClientConnection(args); }
private void CloseClientConnection(AsyncClientArgs args) { try { args.AcceptSocket.Shutdown(SocketShutdown.Both); } catch (SocketException ex) { Log.Debug(ex.Message); } args.AcceptSocket.Close(); // освобождаем ресурс для следующего клиента _clientPool.Release(args); }
private void ProcessReceive(AsyncClientArgs args) { // если данные получены if (args.SocketError == SocketError.Success) { if (args.BytesTransferred > 0) { var message = args.UTF8Message; Log.Debug("{0} > {1}", args.AcceptSocket.RemoteEndPoint, message); // передаем сообщение логическому серверу и получаем ответ //message = LogicServer.GetResponse(message); if (message == null) { CloseClientConnection(args); return; } args.UTF8Message = message; // посылаем сообщение обратно клиенту if (!args.AcceptSocket.SendAsync(args)) ProcessSend(args); } else { // клиент закончил передачу сообщения CloseClientConnection(args); } } else { Log.Error("{0} > {1}", args.AcceptSocket.RemoteEndPoint, args.SocketError); CloseClientConnection(args); } }