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

C++ Discussion :

Problème de port en UDP


Sujet :

C++

  1. #1
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut Problème de port en UDP
    Bonjour à tous

    Voilà j'ai un réseau (windows) sur lequel une machine émet en UDP vers une autre sur une adresse et un port spécifique. Depuis quelque temps je constate une erreur 10060 quand l'éméteur utilise certains ports.
    Par exemple le port 54498 ne fonctionne pas alors que le port 58573 lui fonctionne.
    J'ai regardé le pare feux et il ne semble pas que ces ports soient bloqués
    Voici le code que j'utilise pour recevoir les trames
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    // testudp.cpp : Ce fichier contient la fonction 'main'. L'exécution du programme commence et se termine à cet endroit.
    //
     
    #include <iostream>
    #include <WS2tcpip.h>
     
    #pragma comment (lib, "ws2_32.lib")
     
    int main()
    {
    	std::cout << "Hello World!\n";
    	WSADATA data;
     
    	int wsok = WSAStartup(MAKEWORD(2, 2), &data);
    	if (wsok != 0)
    	{
    		return -100;
    	}
    	SOCKET sockDO = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    	SOCKADDR_IN addrDO = { 0 };
     
    	addrDO.sin_addr.s_addr = INADDR_ANY;
    	addrDO.sin_family = AF_INET;
    	addrDO.sin_port = htons(3050);
     
    	if (::bind(sockDO, reinterpret_cast<sockaddr*>(&addrDO), sizeof(addrDO)) == SOCKET_ERROR)
    	{
    		return -2;
    	}
    	int timeout = 200;
    	char dtaDO[64];
    	while (1)
    	{
     
    		socklen_t addrlen = sizeof(addrDO);
    		setsockopt(sockDO, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));
    		int res = recvfrom(sockDO, dtaDO, 64, 0, reinterpret_cast<sockaddr*>(&addrDO), &addrlen);
    		if (res < 0)
    		{
    			std::cout << "Erreur=" << WSAGetLastError();
    		}
    	}
    }
    J'avoue être un peu perdu. Une idée d'où pourrait provenir ce blocage?
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Salut, à tout hasard ça ne serait pas lorsque tu lances ton programmes deux fois d'affilé? dans ce cas il faut passé en flag reuseADDR (je ne me rappelle plus de la syntaxe, mais une recherche google pourra t'aider).

    Sinon un petit coup de netstat -a permettra de savoir si le port est utilisé par un autre programme ou non .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #3
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Mon programme n'est pas lancé 2 fois et netstat -a n'indique pas que les ports sont pris
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Quand je disais lancé deux fois d'affilé c'est:

    Je lance, je l'arrète, je relance.

    Des fois les ports mettent du temps à se réinit sur windows et donc sans le reuseaddr, ça peut provoqué ça, j'ai eu le soucis au boulot.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tu ne close jamais le socket, donc oui il doit traîner un peu dans le système avant d'être libéré en fin de programme.
    Tu pourrais aussi utiliser le port 0 pour laisser le système en trouver un adéquat tout seul.
    Si tu as besoin de connaître le port ouvert, tu peux utiliser getsockname.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Actuellement je travaille avec un système de test équivalent au système réel et qui est configuré de la façon suivante:

    J'ai un PC émetreur qui lit un fichier de trames UDP enregistrées avec l'utilitaire d'analyse de réseau WireShark et j'ai mon PC récepteur sur lequel je lance le code que j'ai fourni.

    Il y a des cas où ça marche parfaitement et d'autre ou je n'ai pas de réception et l'erreur affichée est 10060

    La seule différence que j'ai remarqué c'est qu'en fonction du port d’émission la communication passe ou ne passe pas.

    Pour vérifier que la communication passe j’exécute l'utilitaire d'analyse de réseau WireShark sur le PC de réception et je vois les messages UPD passer mais mon ne reçoit rien.

    Cependant il arrive parfois que l’Exécution de WireSherk sur le PC de réception "débloque" la communication et mon programme reçois les informations.

    Je ne peux pas mettre le port à 0 et laisser le système en trouver un car je suis contraint par le système réel
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

Discussions similaires

  1. Port Scanner UDP/TCP Problèmes
    Par SmoZy dans le forum Réseau/Web
    Réponses: 19
    Dernier message: 18/06/2014, 16h29
  2. problème connexion port UDP
    Par Darkaurora dans le forum Développement
    Réponses: 1
    Dernier message: 01/07/2011, 21h17
  3. Problème avec port Série sur Win XP
    Par alexorel dans le forum MFC
    Réponses: 9
    Dernier message: 27/10/2005, 15h32
  4. [EasyPHP]Problème de port
    Par gwendo dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/10/2005, 11h31
  5. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34

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