Pergunta

Alguém poderia me apontar na direção certa para aprender a fazer redes em C#/. Net 3.5? Amostras de código e explicações são bem -vindas. Basicamente, estou procurando como fazer modelos de servidor/cliente assíncronos/multithread.

Estou bastante confortável com o básico de como conseguir isso em C ++ com o Winsock, mas, embora toda a minha pesquisa pareça não conseguir entender esse conceito em C#.

Agradeço por qualquer ajuda que você possa oferecer :)

Foi útil?

Solução

Se o WCF atender às suas necessidades, vale a pena olhar. Zeroc e outras bibliotecas de nível superior alternativas existem. Caso contrário, existem várias maneiras diferentes de trabalhar mais perto do nível do soquete, se é isso que você precisa.

TcpClient/udpClient

Eles fornecem um invólucro relativamente fino ao redor dos soquetes subjacentes. Ele essencialmente fornece um fluxo sobre o soquete. Você pode usar os métodos assíncronos no NetworkStream (BeginRead, etc.). Não gosto deste, pois o invólucro não fornece muito e tende a ser um pouco mais estranho do que usar o soquete diretamente.

Soquete - selecione

Isso fornece a técnica de seleção clássica para multiplexação de múltiplos soquete IO em um único thread. Não mais recomendado.

Socket - estilo APM

O modelo de programação assíncrono (também conhecido como iasyncresult, BEGIN/END STILE) para soquetes é a técnica principal para usar soquetes de forma assíncrona. E existem várias variantes. Essencialmente, você chama um método assíncrono (por exemplo, BeginReceive) e faz um dos seguintes:

  1. Pesquisa para conclusão no IIAsyncresult devolvido (dificilmente usado).
  2. Use o WaitHandle do iAsyncresult para aguardar a conclusão do método.
  3. Passe o método BEGNXXX Um método de retorno de chamada que será executado quando o método for concluído.

A melhor maneira é o número 3, pois geralmente é o mais conveniente. Em caso de dúvida, use esse método.

Alguns links:

.NET 3.5 soquetes de alto desempenho

O .NET 3.5 introduziu um novo modelo para soquetes assíncronos que usam eventos. Ele usa o modelo Async "simplificado" (por exemplo, soquete.sendasync). Em vez de dar um retorno de chamada, você se inscreve em um evento para conclusão e, em vez de um IIAsyncresult, você recebe o SocketasynceventArgs. A idéia é que você possa reutilizar o soquetesynceventArgs e a memória pré-alocada para o soquete IO. Em cenários de alto desempenho, isso pode ser muito mais eficiente que o uso do estilo APM. Além disso, se você pré-alocar a memória, obterá uma pegada de memória estável, a coleta reduzida de lixo, os orifícios da memória da fixação etc. Observe que se preocupar com isso deve ser apenas uma consideração nos cenários de alto desempenho.

Resumo

Para a maioria dos casos, use o método de retorno de chamada do estilo APM, a menos que você prefira o estilo do método SocketasynceventArgs / Async. Se você usou a conclusão do Winsock, deve saber que esses dois métodos usam o ConcliOnports sob o capô.

Outras dicas

No .NET 3.5 World, você definitivamente deve aprender Fundação de comunicação do Windows - .NET Framework for Networking.

Link útil:

Operações síncronas e assíncronas (no WCF)

Você pode encontrar informações úteis do WCF em Postagens de navegação em Stackoverflow Marcado com WCF marcação

Depende do que você deseja se concentrar.

Se você deseja se concentrar na funcionalidade e deixar o encanamento na estrutura, comece com a Windows Communication Foundation.

Se você deseja construir seu próprio encanamento, use System.Net.Sockets.Socket classe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top