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();
        }
Пример #2
0
	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);
	}
Пример #3
0
	private void CloseClientConnection(AsyncClientArgs args)
	{
		try
		{
			args.AcceptSocket.Shutdown(SocketShutdown.Both);
		}
		catch (SocketException ex)
		{
			Log.Debug(ex.Message);
		}
		
		args.AcceptSocket.Close();
		
		// освобождаем ресурс для следующего клиента
		_clientPool.Release(args);
	}
Пример #4
0
	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);
		}
	}