IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Questions sur les sockets (fonctions synchrones)


Sujet :

Dotnet

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Points : 49
    Points
    49
    Par défaut Questions sur les sockets (fonctions synchrones)
    Bonjour

    J'utilise les sockets pour la premier fois en .Net et je suis assez perdu face aux différences avec le VB6.

    Tout d'abord, il n'y a pas d'autres solutions pour savoir si des données ont été reçu que d'utiliser un timer pour faire Receive ? Parce que si on prend un timer trop lent, on va perdre en performances réseau et si trop rapide, on va bouffer le CPU pour rien.

    J'ai aussi un problème sur les buffers. Si on essaye d'envoyer en une fois plus que le buffer l'autorise, on perd des données ? Donc il faut bien splitter les données pour les envoyer en 2 fois.
    Comment faites vous pour indiquer que les données sont sur X "paquets" à votre application ?
    Et si on utilise les timers pour faire Socket.Receive, imaginons que le client envoye 2 paquets (dont un ayant la taille du buffer donc) en 100ms et que le serveur a aussi un timer de 100ms, on va perdre des données ? Comment faites vous pour que ça ne se produise pas ? J'ai pensé à une pile. Comme le serveur dans ce cas va recevoir, le client va empiler ce qu'il a à envoyer et désempiler à chaque 100ms.

    Voila, c'est peut être bête mais je n'ai pas trouvé de doc sur ceci à part des tuts basiques sur les sockets.

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut Socket en .Net
    Alors cela dépend ce que tu veux faire dans ton program mais je t'invite a regarder le Remoting c'est très pratique de nos jours en .Net.

    Sinon pour ton problème d'envoi je n'ai jamais eu de soucis d'envoi de paquet. Je met le buffeur que je veux envoyer et le .Net gère pour moi le découpage en paquet et la concordance des paquets reçus

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Points : 49
    Points
    49
    Par défaut
    Ah d'accord, il gère le découpage tout seul.
    Le remoting ne va pas car il n'est pas présent dans le Compact Framework (le client est un Smartphone).
    Sinon pour la réception, tu utilises des timers ? Il n'y a aucune autre solution ?
    Merci pour ta réponse

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 68
    Points
    68
    Par défaut Nullement
    Je ne coprend pas pourquoi tu aurais besoin d'un timer explique ?

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Points : 49
    Points
    49
    Par défaut
    Pour faire Socket.Receive, qui permet de récupèrer le contenu du buffer. Etant donné qu'il n'y a plus d'évenement "OnReceive" (ou du genre) comme en VB6, j'ai pas vu comment faire d'autre, et jai vu des exemples de codes sources qui utilisent aussi un timer pour faire Socket.Receive.
    Tu peux aussi vérifier Socket.Available avant de faire Socket.Receive pour vérifier s'il y a des données reçues, histoire de ne pas faire Receive s'il n'y a rien, pour ne pas "geler" le socket en attendant des données.

  6. #6
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Oulala, je te conseille un petit tutos sur les sockets :
    Par ici

    Bonne chance !

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Points : 49
    Points
    49
    Par défaut
    Je l'ai déjà lu mais il est à propos des fonctions asynchrones alors que j'utilise les fonctions synchrones pour plus de "simplicité" (haha, quelle naïveté ). Si j'ai bien saisis, pour recevoir, il faut appeler BeginReceive et EndReceive, donc il faut utiliser un timer pour vérifier régulièrement ?!
    Comme je vous ai dis, je ne comprend pas comment recevoir continuellement les données reçues comme avec les évenements en VB6, mis à part avec les timers. Mais vu vos réponses, j'ai dû louper quelque chose... Les sources que j'ai trouvé utilisent des timers et les sites de tutoriaux des sockets n'indiquent pas clairement comme faire. Alors comment faites-vous ?

  8. #8
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par azerty25
    Je l'ai déjà lu mais il est à propos des fonctions asynchrones alors que j'utilise les fonctions synchrones pour plus de "simplicité" (haha, quelle naïveté ). Si j'ai bien saisis, pour recevoir, il faut appeler BeginReceive et EndReceive, donc il faut utiliser un timer pour vérifier régulièrement ?!
    Comme je vous ai dis, je ne comprend pas comment recevoir continuellement les données reçues comme avec les évenements en VB6, mis à part avec les timers. Mais vu vos réponses, j'ai dû louper quelque chose... Les sources que j'ai trouvé utilisent des timers et les sites de tutoriaux des sockets n'indiquent pas clairement comme faire. Alors comment faites-vous ?
    Un timer ????? pour vérifier l'arrivée des données ? Pas du tout

    Tout ce fait tout seul... Vu que tu es débutant(e) je te conseille de faire des recherches sur le site de dvp tu trouveras ton bonheur sinon j'ai fais un tutos mais il n'est pas encore en ligne mais il le sera dès demain j'espère...

    Good luck

Discussions similaires

  1. [debutant][Client-serveur] Question sur les sockets
    Par skwi6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/11/2006, 15h04
  2. Question sur les socket AF_UNIX
    Par Mr_Chut dans le forum Réseau
    Réponses: 3
    Dernier message: 10/06/2006, 11h42
  3. Questions sur les socket
    Par lapras123 dans le forum Réseau
    Réponses: 13
    Dernier message: 09/06/2006, 16h34
  4. Encore une petite question sur les sockets...
    Par damien99 dans le forum MFC
    Réponses: 4
    Dernier message: 15/02/2006, 14h22
  5. [WinSock] Question sur les sockets (accept)
    Par Grey dans le forum MFC
    Réponses: 3
    Dernier message: 09/01/2006, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo