Mostrando postagens com marcador C#. Mostrar todas as postagens
Mostrando postagens com marcador C#. Mostrar todas as postagens

quarta-feira, agosto 24, 2011

Curso de .NET Avançado -120 horas

OBJETIVOS

O curso tem como objetivo formar profissionais com qualificação em desenvolvimento voltado a web, utilizando as mais avançadas ferramentas do mercado. O aluno aprenderá desde conceitos básicos de web até desenvolver e gerenciar conteúdo do site utilizando autenticação e banco de dados.

PÚBLICO-ALVO

Profissionais com conhecimentos básicos em programação.

MATRÍCULAS

Até 29/09/2011 na APM-Liberato, das 8h às 21h, mediante o pagamento da primeira parcela, a apresentação do comprovante de residência e cópia do RG e do CPF (se menor de idade, apresentar documentos do pai/mãe ou responsável). Endereço: Rua Inconfidentes 395, bairro Primavera – Novo Hamburgo/RS – Fone: 3584-2029.


sexta-feira, outubro 01, 2010

TCP Client & Server

Essa semana precisei fazer um server e um client usando TCP. Depois de muita busca achei a melhor solução no livro C# CookBook 2nd Edition da Editora O´Reilly. Mas claro que no livro a solução não estava 100%, faltava declarar uns namespaces e um objeto.

No livro o autor cita que será usado o System.Net mas assim que comecei a ler o codigo percebi que ia precisar de outras namespaces, então declarei as seguintes:

using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;

No meu caso utilizei as listadas a cima mas para seguir o exemplo do livro também é necessário declarar a seguinte namespace para utilizar o Trace:

using System.Diagnostics;

Com isso fiz a seguinte alteração no codigo, troquei o Trace.WriteLine por Console.WriteLine, assim consigo ver todos os resultados no console, quando o Trace aparece apenas no output do debug.

Como a classe é meio grande vou fatiar em pedaços para ficar mais claro mas fica o link para baixar o codigo.

A estrutura inicial da classe é a seguinte:

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;

namespace TCP_UDP_Server
{
    public class TCPServer
    {
        private TcpListener listener = null;
        private IPAddress address;
        private int port;
        private bool listening = false;
        private object _syncRoot;

        public TCPServer(IPAddress address, int port)
        {
            this.address = address;
            this.port = port;
            _syncRoot = this;
        }

        public void Listen()
        {
            //CODE HERE
        }

        public void StopListening()
        {
            if (listening)
            {
                lock (_syncRoot)
                {
                    listening = false;
                    listener.Stop();
                }
            }
        }

        private void ProcessClient(object client)
        {
            //CODE HERE
        }

        public IPAddress Address
        {
            get { return address; }
        }

        public int Port
        {
            get { return port; }
        }

        public bool Listening
        {
            get { return listening; }
        }
    }
}

No método Listen() é criado uma escuta para o endereço e a porta configurada. Após isso fica escutando a porta por mensagens do client(o client não vou comentar nesse post, vou criar outro só para explicar sua funcionalidade).

try
{
    lock (_syncRoot)
    {
        listener = new TcpListener(address, port);
        listener.Start();
        listening = true;
    }

    do
    {
        Console.Write("Looking for someone to talk to... ");

        TcpClient newClient = listener.AcceptTcpClient();
        Console.Write("Connected to new client");

        ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessClient), newClient);

    } while (listening);
}
catch (SocketException se)
{
    Console.WriteLine("SocketException: ", se.ToString());
}
finally
{
    StopListening();
}

E no método ProcessClient() é recebido o pacote e transformado em uma string. Ao receber os dados retorna uma mensagem para o client avisando o recebimento.

TcpClient newClient = (TcpClient)client;
try
{
    byte[] bytes = new byte[1024];
    StringBuilder clientData = new StringBuilder();

    using (NetworkStream ns = newClient.GetStream())
    {
        ns.ReadTimeout = 60000;
        int bytesRead = 0;
        do
        {
            try
            {
                bytesRead = ns.Read(bytes, 0, bytes.Length);
                if (bytesRead > 0)
                {
                    clientData.Append(Encoding.ASCII.GetString(bytes, 0, bytesRead));
                    ns.ReadTimeout = 3000;
                }
            }
            catch (IOException ioe)
            {
                Console.WriteLine("Read time out: "+ ioe.Message);
                bytesRead = 0;
            }
        } while (bytesRead > 0);

        Console.WriteLine("Client says: " + clientData.ToString());

        bytes = Encoding.ASCII.GetBytes("Thanks call again!");

        ns.Write(bytes, 0, bytes.Length);
    }
}
finally 
{
    if (newClient != null)
        newClient.Close();
}

terça-feira, janeiro 26, 2010

ASP.NET e C# definindo a cultura do site

Para definir a cultura, basta colocar o codigo abaixo no web config.
<system.web>
    <globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="pt-br" uiCulture="pt-br"/>
</system.web>
Caso não funcione, tente fazer um override no método abaixo para forçar a cultura. Se funcionar provavelmente a cultura está sendo alterada em outro lugar.
protected override void OnLoadComplete(EventArgs e)
{
    base.OnLoadComplete(e);
    Page.Culture = "pt-br";
}
Neste caso, re-veja o código da MasterPage ou na própria pagina verifique a primeira linha no aspx onde define a herança e os vinculos.
<%@ ... Culture="pt-br" %>

terça-feira, janeiro 19, 2010

Executando um processo C# :: Code Snippet

Utilizar a System.Diagnostics e System.Security.
Process p;
Process[] processos;
processos = Process.GetProcessesByName("calc");

if (processos.Length == 0)
{
    p = new Process();
    ProcessStartInfo info = new ProcessStartInfo();
    //para executar o processo com um usuario e senha
    //info.UserName = "user";
    //info.Password = SecureString("pass");
    //info.UseShellExecute = false;
    info.FileName = "calc";
    p.StartInfo = info;
    p.Start();
}
protected SecureString SecureString(string pass)
{
    SecureString ss = new SecureString();
    foreach (char c in pass)
    {
        ss.AppendChar(c);
    }
    return ss;
}

segunda-feira, dezembro 21, 2009

Alterando o app.config

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
AppSettingsSection configSection = config.AppSettings;

try
{
    if (configSection != null)
    {
        if (configSection.IsReadOnly() == false && configSection.SectionInformation.IsLocked == false)
        {
            configSection.Settings["myKey"].Value = "newValue";
            config.Save();
        }
    }
}
catch (ConfigurationException ex)
{
    MessageBox.Show(ex.Message, "Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}