2010-09-14 6 views
3

Je suis un ingénieur Jr. dans l'espoir de demander conseil à toutes les personnes expérimentées ici en ce qui concerne la façon d'aborder cela.Flux d'octets C# via TCP

Un projet m'a été affecté pour créer une application serveur/client qui effectue un transfert d'octets via TCP. Notre société s'occupe des radios bidirectionnelles avec GPS avec un logiciel de répartition et nous aimerions en faire une application serveur/client. Actuellement, le logiciel de répartition peut être relié à une station de base centrale où un utilisateur doit être, mais nous voulons rendre ce logiciel accessible depuis un emplacement distant (si la station de base se trouve à un kilomètre de distance d'un répartiteur).

utilisateur/client -> bureau de vote d'un micro -> serveur -> station de base -> signal en direct -> radio et retour

J'ai cherché à Windows Communication Foundation, mais ce sont d'autres façons peut aborder cela?

Je vais principalement en utilisant C#/.NET/Visual Studio 2008

Répondre

1

Nous avons utilisé UDP pour envoyer les mises à jour GPS des voitures à un serveur qui traite les mises à jour. Dans des applications de ce type (où vous avez souvent une bande passante limitée), vous pouvez réellement faire la différence (en termes de temps nécessaire pour transférer les données de l'hôte distant vers le serveur) entre les connexions TCP UDP et temporaires (comme HTTP). Un paquet UDP arrivera à destination dans ce qui semble être un instant, et la configuration de la connexion TCP est très visible, ce qui prend souvent plusieurs secondes. J'aime le framework WCF, mais si votre application est le genre de système avec lequel j'ai travaillé, je doute que vous en soyez satisfait (... à moins que ce ne soit OK d'avoir un long intervalle entre les mises à jour). Dernièrement, j'ai travaillé avec des connexions TCP persistantes (en utilisant des Sockets raw), ce qui est un bon moyen d'aller si vous voulez vous assurer que vos paquets arrivent à destination. Bien que la façon de faire cela, je crois, est de laisser la connexion ouverte aussi longtemps que possible et d'incorporer du code pour le reconnecter s'il se casse.

+0

Si vous êtes intéressé, voici un lien vers un autre article sur l'utilisation des sockets: http://stackoverflow.com/questions/3609280/tcpclient-send-data-and-recieve-data-over-network/ 3609784 # 3609784 –

+0

Merci pour votre réponse. Est-ce aussi une bonne approche si je cherche à gérer plusieurs clients/connexions en même temps? J'ai essayé de travailler avec des threads dans le serveur tout en écoutant constamment de nouveaux clients, mais je pense qu'il se bloque dans l'infini tout en boucle. Tout bon lit sur les threads? – mastofact

+0

J'ai tendance à penser que c'est un bon moyen de gérer plusieurs clients. Tout comme vous l'avez mentionné, je génère un thread pour chaque nouvelle connexion, bien que je n'ai pas vu le problème de verrouillage. Dans l'autre thread, j'ai posté un exemple de code avec des commentaires que je pense être un bon début sur un serveur. Ce code ne crée pas chaque nouvelle connexion dans son propre thread, bien qu'un de mes commentaires le décrit. Si vous trouvez cela utile, je serais heureux de répondre à vos questions. Heureusement, il ya beaucoup d'articles sur la programmation socket en C# ... –

0

Si vous voulez juste un flux d'octets brut, puis un Socket ou encapsulées un peu plus TcpClient pourrait être une solution de poids plus léger. Mais si vous voulez envoyer des structures de données complètes et des «fonctions d'appel», alors WCF semble être un bon choix. Avec WCF vous avez une expérience de programmation proche de l'appel de méthodes régulières avec des objets réels en tant que paramètres, mais avec un Socket vous envoyez simplement des tableaux d'octets et vous devez interpréter le résultat tout seul.