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

Réseaux Discussion :

UDP Client Serveur sur serveur local.


Sujet :

Réseaux

  1. #21
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut Test en mode adminstrateur
    J'ai testé en démarrant l'application en mode admin.
    Ça ne change rien.

    TCP OK

    UDP KO
    Bien le bonjour chez vous
    Jowo

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Les 2 en admins ? Bon, est-ce que la version de Java est la même sur S2 que sur S1 ? Est-ce que dans le code, y a moyen d'avoir des logs ou debug sur l'appli serveur surtout, notamment après l'instruction d'écoute, comme ca on peut voir si l'appli serveur (voire aussi l'appli client) ne rencontre pas en réalité des problèmes

    Sinon, tu utilises la méthode bind de la classe DatagramSocket pour la partie serveur ? Tu peux tester avec cet outil pour voir s'il y a une différence http://sockettest.sourceforge.net/ C'est comme ton appli client serveur, c'est juste pour voir si ca le fait avec un autre programme

  3. #23
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Bonjour Spellbinder,

    D'abord merci pour ton aide.

    Les applications ne sont écrites en Java mais en C#. Si Java est installé sur S2, je ferai des tests avec ton programme.

    J'ai installé une version TRACE sur S2 mais pas de message d'erreur ni pour le client ni pour le serveur. C'est comme si la connexion UDP n'était pas établie.
    J'ai utilisé l'outil TCPView de Sysinternal. Je vois le port utilisé par mon serveur UDP.

    Le client
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    using System;
    using System.Net;
    using System.Net.Sockets;
    using NetTcpClient = System.Net.Sockets.TcpClient;
    using NetUdpClient = System.Net.Sockets.UdpClient;
    using System.Text;
    using System.Threading;
    
    namespace UdpClientTest
    {
      static class Program
      {
        private static readonly Barrier barrierSendComplete = new Barrier(2);
    
        static void Main(string[] args)
        {
          // Command Line
          // 1: [UDP | TCP] Default UDP
          // 2: Adresse IP
          // 3: Port
          // 4: Nom machine
          // 5: Message
          if (args.Length >= 4)
          {
            IClient client;
            string protocole = "UDP";
            int argIndx = 0;
            if ("UDP".Equals(args[argIndx], StringComparison.OrdinalIgnoreCase) ||
                "TCP".Equals(args[argIndx], StringComparison.OrdinalIgnoreCase))
            {
              protocole = args[argIndx++];
            }
    
            IPAddress ipAddr;
            int port;
    
            if (IPAddress.TryParse(args[argIndx++], out ipAddr) && int.TryParse(args[argIndx++], out port))
            {
              string machineName = args[argIndx++];
              string message = string.Join(" ", args, argIndx, args.Length - argIndx);
              if ("TCP".Equals(protocole, StringComparison.OrdinalIgnoreCase))
              {
                client = new TcpClient();
              }
              else
              {
                client = new UdpClient();
              }
    
              byte[] dgram = Encoding.Default.GetBytes($"${machineName}:{message}$");
              // Affiche les bytes envoyés en HEX
              Console.WriteLine($"HEX DataGramm: {BitConverter.ToString(dgram)} ");
              client.Connect(ipAddr, port);
              client.Send(dgram, dgram.Length, SendComplete);
              barrierSendComplete.SignalAndWait();
            }
          }
          else
          {
            Console.WriteLine("USAGE: [UDP|TCP] AdresseIP Port NomMachine Message");
          }
        }
    
        private static void SendComplete(IAsyncResult ar)
        {
          Socket socket = ar.AsyncState as Socket;
          if (socket != null)
          {
            Console.WriteLine($"{DateTime.Now} Connected: {socket.Connected} Completed: {ar.IsCompleted} TTL: {socket.Ttl}");
            IPEndPoint ipEP = socket.RemoteEndPoint as IPEndPoint;
            if (ipEP != null)
            {
              Console.WriteLine($"{DateTime.Now} Connected to: {ipEP.Address} on port nbr: {ipEP.Port}");
            }
            socket.Close();
            Console.WriteLine($"{DateTime.Now} Close");
            barrierSendComplete.SignalAndWait();
          }
        }
      }
    
      internal interface IClient
      {
        void Connect(IPAddress ipAddress, int port);
    
        IAsyncResult Send(byte[] data, int dataLength, AsyncCallback requestCallback);
      }
    
      internal class UdpClient : IClient, IDisposable
      {
        private readonly NetUdpClient udpClient;
    
        public UdpClient()
        {
          udpClient = new NetUdpClient();
        }
    
        public void Connect(IPAddress ipAddress, int port)
        {
          udpClient.Connect(ipAddress, port);
        }
    
        public IAsyncResult Send(byte[] data, int dataLength, AsyncCallback requestCallback)
        {
          Console.WriteLine($"{DateTime.Now} DontFragment: {udpClient.DontFragment}");
          udpClient.DontFragment = true;
          return udpClient.BeginSend(data, dataLength, requestCallback, udpClient.Client);
        }
    
        #region IDisposable Support
        private bool disposedValue = false; // Pour détecter les appels redondants
    
        protected virtual void Dispose(bool disposing)
        {
          if (!disposedValue)
          {
            if (disposing)
            {
              udpClient.Close();
            }
            disposedValue = true;
          }
        }
    
    
        // Ce code est ajouté pour implémenter correctement le modèle supprimable.
        public void Dispose()
        {
          // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus.
          Dispose(true);
        }
        #endregion
      }
    
      internal class TcpClient : IClient, IDisposable
      {
        private readonly NetTcpClient tcpClient;
    
        public TcpClient()
        {
          tcpClient = new NetTcpClient();
        }
    
        public void Connect(IPAddress ipAddress, int port)
        {
          tcpClient.Connect(ipAddress, port);
        }
    
        public IAsyncResult Send(byte[] data, int dataLength, AsyncCallback requestCallback)
        {
          Socket socket = tcpClient.Client;
          return socket.BeginSend(data, 0, dataLength, SocketFlags.None, requestCallback, socket);
        }
    
        #region IDisposable Support
        private bool disposedValue = false; // Pour détecter les appels redondants
    
        protected virtual void Dispose(bool disposing)
        {
          if (!disposedValue)
          {
            if (disposing)
            {
              // TODO: supprimer l'état managé (objets managés).
              tcpClient.Close();
            }
    
            // TODO: libérer les ressources non managées (objets non managés) et remplacer un finaliseur ci-dessous.
            // TODO: définir les champs de grande taille avec la valeur Null.
    
            disposedValue = true;
          }
        }
    
        // Ce code est ajouté pour implémenter correctement le modèle supprimable.
        public void Dispose()
        {
          // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus.
          Dispose(true);
        }
        #endregion
      }
    
    }
    Le serveur
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    using System;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using TcpServerNet = System.Net.Sockets.TcpListener;
    
    
    namespace UdpServer
    {
      static class Program
      {
        static void Main(string[] args)
        {
          int port = 2564;
          IPAddress ipAddress = IPAddress.Any;
          string protocole = "UDP";
    
          if (args.Length > 0)
          {
            int argIndx = 0;
            if ("UDP".Equals(args[argIndx],StringComparison.OrdinalIgnoreCase) ||
                "TCP".Equals(args[argIndx], StringComparison.OrdinalIgnoreCase))
            {
              protocole = args[argIndx];
              argIndx++;
            }
            if (args.Length > argIndx)
            {
              if (!int.TryParse(args[argIndx], out port))
              {
                Console.WriteLine($"Invalid port. Set port to default port value : {port}:");
                return;
              }
              argIndx++;
            }
            if (args.Length > argIndx)
            {
              if (args[argIndx].Equals("IPV6", StringComparison.OrdinalIgnoreCase))
              {
                ipAddress = IPAddress.IPv6Any;
              }
            }
          }
          IPEndPoint ipep = new IPEndPoint(ipAddress, port);
          IServer server = GetServer(protocole,ipep);
    
          Console.WriteLine($"{protocole} server started. Listen on {ipep.Address} and port {ipep.Port}.");
          Console.WriteLine("Waiting for a client...");
          IPEndPoint sender = new IPEndPoint(ipAddress, port);
    
          try
          {
            while (true)
            {
              byte[] data = server.Receive(ref sender);
              Console.WriteLine($"HEX DataGramm: {BitConverter.ToString(data)} ");
              string msg = Encoding.Default.GetString(data, 0, data.Length);
              Console.WriteLine(msg);
            }
          }
          finally
          {
            server.Close();
          }
        }
    
        private static IServer GetServer(string protocole, IPEndPoint localEP)
        {
          IServer server;
          if ("TCP".Equals(protocole, StringComparison.OrdinalIgnoreCase))
          {
            server = new TcpServer(localEP);
          }
          else
          {
            server = new UdpServer(localEP);
          }
          return server;
        }
      }
    
      internal interface IServer
      {
        byte[] Receive(ref IPEndPoint remoteEP);
    
        void Close();
      }
    
      internal class TcpServer : IServer, IDisposable
      {
        private readonly TcpListener tcpListener;
        public TcpServer(IPEndPoint localEP)
        {
          tcpListener = new TcpListener(localEP);
          tcpListener.Start();
        }
    
        public byte[] Receive(ref IPEndPoint remoteEP)
        {
          Socket client = tcpListener.AcceptSocket();
          byte[] buffer = new byte[1024];
          int size = client.Receive(buffer);
          Array.Resize(ref buffer, size);
          client.Close();
          return buffer;
        }
    
        public void Close()
        {
          Dispose();
        }
    
        #region IDisposable Support
        private bool disposedValue = false; // Pour détecter les appels redondants
    
        protected virtual void Dispose(bool disposing)
        {
          if (!disposedValue)
          {
            if (disposing)
            {
              tcpListener.Stop();
            }
            disposedValue = true;
          }
        }
    
        // Ce code est ajouté pour implémenter correctement le modèle supprimable.
        public void Dispose()
        {
          // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus.
          Dispose(true);
        }
        #endregion
    
      }
    
      internal class UdpServer : IServer, IDisposable
      {
        private readonly UdpClient udpClient;
    
        public UdpServer(IPEndPoint localEP)
        {
          udpClient = new UdpClient(localEP);
        }
    
        public byte[] Receive(ref IPEndPoint remoteEP)
        {
          return udpClient.Receive(ref remoteEP);
        }
    
        public void Close()
        {
          Dispose();
        }
    
        #region IDisposable Support
        private bool disposedValue = false; // Pour détecter les appels redondants
    
        protected virtual void Dispose(bool disposing)
        {
          if (!disposedValue)
          {
            if (disposing)
            {
              udpClient.Close();
            }
    
            disposedValue = true;
          }
        }
    
        // Ce code est ajouté pour implémenter correctement le modèle supprimable.
        public void Dispose()
        {
          // Ne modifiez pas ce code. Placez le code de nettoyage dans Dispose(bool disposing) ci-dessus.
          Dispose(true);
        }
        #endregion
      }
    }
    Bien le bonjour chez vous
    Jowo

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Bonjour Jowo

    Ah ok désolé j'ai cru qu'elles étaient en Java comme tu es développeur Java ^^

    Est-ce que tu peux faire une capture avec Wireshark pour voir sur S2 ? Tu devrais normalement voir les paquets envoyés par le client même sur la même machine, à son IP externe privée. Bien que je ne sois pas développeur C#, ton code a l'air d’être ok, enfin y a rien d'anormal surtout qu'il fonctionne sur une autre machine, après peut-être ajouter quelques try catch à certains endroits pour voir s'il y a un problème ?

  5. #25
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    J'étais développeur Java...

    Sur S2, Java n'est pas installé.

    Pour Wireshark, je crois qu'il est nécessaire d'installer WinPCap pour analyser les paquets du réseau, dites-mois si je me trompe. WinPCAP s'installe comme un driver donc une possibilité que je doive redémarrer le serveur ou qu'il ne fonctionne plus après installation. Comme je l'ai écrit, S2 ne peut pas être stoppé.

    J'ai demandé au département informatique qu'il analyse le réseau et les modifications faites sur S2. J'attends toujours leur réponse.
    Bien le bonjour chez vous
    Jowo

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Oui je comprends, bon on va faire autrement si tu ne peux pas installer Wireshark dessus.

    Le département informatique doit capturer directement sur le serveur car les paquets ne quittent pas S2 en fait, maintenant si c'est une VM, il y a moyen de lancer une capture directement depuis l’hyperviseur, VMware?

    Dans ton code serveur, je ne sais pas si ca va changer quelque chose, mais est-ce que tu peux créer un dump (dans un fichier texte) dès que tu crées la socket ? Comme ca tu enregistres tout ce que l'application recoit comme trafic Notamment quand tu essaies l'appli client

    EDIT : je rajoute un test : comment tu effectues l'écoute sur la partie serveur ? Le programme écoute par défaut sur 0.0.0.0 c'est ca ? Est-ce que tu peux essayer stp avec l'IP externe de S2 plutôt pour voir s'il y a une différence ?

  7. #27
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    J'ai modifié mon programme de test pour avoir le choix de l'adresse d'écoute.

    Toujours le même résultat :
    UDP KO
    TCP OK

    J'attends le retour de l'IT.

    Pour le dump, je n'ai pas compris.

    J'ai utilisé l'utilitaire TCPView. Donc je vois bien ma connexion UDP sur le bon port mais je ne reçois aucune donnée.
    Bien le bonjour chez vous
    Jowo

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    D'accord et tu es sûr que tout est identique au niveau des librairies sur S2 ? Je veux dire est-ce qu'il y a une différence de version du .NET framework par exemple entre S1 et S2, tu compiles sur S1 mais peut-être que quand tu lances le exe sur S2, il y a une différence même minime entre des fichiers/librairies, est-ce que c'est plausible ?

  9. #29
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Je reviens pour dire que l'IT du client n'a pas trouvé d'où venez le problème.
    On a modifier l'application pour qu'elle puisse communiquer sur une "adresse IP de secours". Pour ce cas, c'est l'adresse localhost.

    Je marque le problème comme résolu même si ce n'est pas vraiment le cas.
    Bien le bonjour chez vous
    Jowo

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/02/2011, 11h06
  2. requête mysql sur serveur wamp en local !
    Par sebalab dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 19/04/2007, 19h18
  3. [RESEAU] Authentification client linux sur serveur windows
    Par rvfranck dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 19/06/2006, 18h57
  4. Authentification client linux sur serveur windows
    Par rvfranck dans le forum Réseau
    Réponses: 4
    Dernier message: 19/06/2006, 07h27
  5. CORBA sur serveur web en local
    Par barberot dans le forum CORBA
    Réponses: 8
    Dernier message: 31/03/2004, 08h28

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