J'essaie de conceptuellement travailler à travers un modèle pour une application de socket client-serveur J'écris en C# (client et serveur). Mon serveur devra gérer de nombreux clients à la fois, et de préférence plusieurs demandes provenant d'un client à la fois. J'ai élaboré un conteneur pour ma communication où je vais envoyer un en-tête de longueur fixe au début de chaque message qui contiendra (entre autres choses) la longueur du message. J'ai de l'expérience avec la programmation socket en C#, donc je suis à l'aise avec les sockets asynchrones. La principale difficulté que j'ai avec le concept, c'est que j'ai besoin à la fois du client et du serveur pour pouvoir recevoir des messages à n'importe quel moment. Le client va établir une connexion, et rester "connecté" (comme un client de messagerie instantanée), et il devra à la fois recevoir des données à des moments arbitraires et faire des requêtes à des heures arbitraires. J'avais aussi voulu, dans le cadre de mon protocole, recevoir une réponse à chaque requête faite (que ce soit du serveur au client, ou du client au serveur).C# client-serveur protocole/question de modèle
Je voudrais pouvoir utiliser une seule prise si possible. Je crois que je pourrais faire ce travail en utilisant deux sockets, l'un pour faire des demandes serveur-> client et un pour client-> demandes de serveur, mais je ne veux pas les complications supplémentaires de traiter avec deux ports/connexions. Cependant, en utilisant une seule socket, je ne suis pas sûr de savoir comment gérer les demandes d'envoi et obtenir des réponses quand elles pourraient être entrelacées.
Je ne trouve aucun exemple de serveur ou de client similaire dans ma recherche. Merci à tous ceux qui offrent des idées.
Oui. Mais supposons que le serveur demande quelque chose au client, ce qui prend un certain temps. Pendant ce temps, le client demande au serveur quelque chose. Dans BeginReceive de mon serveur, comment puis-je savoir que les données entrantes sont la requête du client ou la réponse à la requête du serveur? C'est ce que je suis aux prises avec. J'ai les bases de l'async. Merci. – Jarrod
Désolé, tout le discours des douilles m'a fait penser que votre problème était à ce niveau; comment est cette mise à jour? –
Désolé, j'ai eu du mal à cadrer ma question ... mais c'est exactement le genre de chose que j'ai essayé de faire. J'avais pensé à utiliser les ID de requête et le dictionnaire, mais je me demandais comment implémenter une méthode pour faire une requête et bloquer jusqu'à ce que le résultat arrive (et le renvoie) sans utiliser quelque chose comme ResetEvent dans mon objet état de requête. Cela serait mauvais de créer ceux pour chaque demande non? Merci. – Jarrod