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 :

Envoyer des informations en "cleartext" ou ASCII en mode client/socket [Débutant]


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut Envoyer des informations en "cleartext" ou ASCII en mode client/socket
    Bonjour à tous,

    Je suis un jeune en C# et je travail avec VS2017.

    Mon probleme est simple:

    Main droite: C'est un serveur qui attend de ma part que je me connecte en mode client et que je lui envoi des infos en mode cleartext/ascii.

    Main gauche, c'est moi! Je dois, dans mon application en C#, me connecter sur le socket 127.0.0.1:8888. Jusque là c'est OK.

    Je dois envoyer au serveur des données venant d'un label.text.
    Il faut que ces données soit en text clair.

    Et c'est la mon probleme. Je ne sais pas faire.

    Voici les codes que j'ai mis en place:
    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
    using System;
    using System.Windows.Forms;
    using System.Net.Sockets;
    using System.Text; 
     
    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                msg("Client Started");
                clientSocket.Connect("127.0.0.1", 5010);
                label1.Text = "Client Socket Program - Server Connected ...";
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
    // qu'est ce que je sois mettre?????
     
            }
        }
    }
    Que me conseillez vous?

    Merci pour votre attention et votre aide.
    Fred

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Tu peux regarder sur la MSDN, la classe System.Net.Sockets.TcpClient dispose d'une méthode GetStream qui renvoie l'objet de flux NetworkStream permettant de recevoir et d'envoyer des données. Il y a des exemples qui sont proposés dans les pages concernées.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    avec un truc dans le genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var bytes = system.text.encoding.asciiencoding.ascii.getbytes("le texte ici");
    clientSocket.GetStream().Send(bytes, 0, bytes.count)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut
    NOXEN: Merci pour tes liens
    POL63: merci aussi pour sa suggestion.

    J'ai essayé les solutions que vous m'avez suggéré, mais je n'ai rien sur mon serveur, hors mis l'identifiant de connexion au socket.

    Pour une meilleur compréhension je peux vous proposer de vous envoyer un zip de l'application du socket.

    voici les derniers codes que j'ai testé. Mais pas mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                IPHostEntry iphostInfo = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress ipAdress = IPAddress.Parse("127.0.0.1"); //(iphostInfo.AddressList[0];
                IPEndPoint ipEndpoint = new IPEndPoint(ipAdress, 5010);
                Socket clientSocket = new Socket(ipAdress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                clientSocket.Connect("127.0.0.1", 5010);
     
                clientSocket.Send(Encoding.UTF8.GetBytes(input));
     
                clientSocket.Close();// "127.0.0.1", 5010);
    Quelle autre idée auriez vous?
    Merci

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    on ne peut pas vraiment t'aider en l'état

    tu nous dit que tu dois envoyer de l'ascci par tcp ip, on te donne le code pour le faire s'il y a un problème (non précisé) il est peut etre ailleurs ou dans ta compréhension de ce que tu dois faire

    le serveur n'attend pas un caractère de fin de trame ?
    pourquoi envoyer en utf8 alors que tu nous parlais d'ascii ?
    pourquoi le port a changé entre les 2 codes ?
    pourquoi utiliser la classe socket qui est plus compliquée que la classe tcpclient ?
    qui a écrit le code serveur ? a t il précisé le protocole de dialogue ?
    ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut
    Bonsoir Pol63,

    Merci pour ta patience a essayer de m'aider. Je vais prendre le plus de soin possible à préciser la situation.

    > tu nous dit que tu dois envoyer de l'ascci par tcp ip, on te donne le code pour le faire s'il y a un problème (non précisé) il est peut etre ailleurs ou dans ta compréhension de ce que tu dois faire
    - effectivement, le probleme est peut être ailleurs et je ne sais pas trop quel est le bon et le mauvais bout du probleme.

    > le serveur n'attend pas un caractère de fin de trame ? Il n'y a pas de caractère de trame spécifiquement attendu.
    Le client "normal" envoi sa trame que j'arrive à "capter". La trame est ainsi:

    Trame reçue : {\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}}<\r><\n>{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\b\f0\fs17 MATIZ-PC : \b0 $msg de test $\par<\r><\n>}<\r><\n>

    la portion qui m'intéresse et que je souhaite envoyer avec mon projet C# est comprise en milieu de trame et entre les $

    > pourquoi envoyer en utf8 alors que tu nous parlais d'ascii ?
    A défaut de m'en sortir je test un peu tout. Mais dans la trame ci dessus, c'est bien du ASCII

    > pourquoi le port a changé entre les 2 codes ?
    J'ai changé le port ayant un doute sur le fait que mon soucis puisse etre lié à un probleme de port, mais il me semble que le port n'y est pour rien.

    > pourquoi utiliser la classe socket qui est plus compliquée que la classe tcpclient ?
    Là, tu touche du doigt mon manque de savoir sur le sujet.
    Il s'avère que l'application serveur que j'utilise (disponible sous WinDev) est avec un socket.
    Il se peut que tu me dise que je suis dans l'erreur, et ça me ferait plaisir de pouvoir apprendre et comprendre sur ce sujet.

    > qui a écrit le code serveur ?
    Le code est celui disponible en tuto par PCSOFT/WINDEV.

    > a t il précisé le protocole de dialogue ?
    N'etant pas expert dans le domaine, je ne sais pas repondre, et les codes sont (a mon gout et pour ma comprehension) mal renseigné.
    Si tu sais coder en WinDev je peux t'envoyer les sources.

    Encore merci pour ton aide.

    A te lire.
    Fred

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    la trame est donc du rtf, pas du texte simple, donc tu peux envoyer du rtf pour essayer
    le plus simple c'est de reprendre tout ce que tu as chopé, tu verras après pour transformer du texte en rtf
    (le rtf est un langage à balise assez vieux qui permet de la mise en page, de la couleur etc...)

    une communication tcp/ip se fait par un socket, mais en .net il y a plusieurs moyens d'utiliser un socket
    la classe socket est une classe de bas niveau permettant énormément de choses, la classe tcpclient se base sur la classe socket mais ne permet que le tcp/ip client, donc elle est plus simple à utiliser et fera le même résultat dans ton cas
    (la classe socket pourrait aussi convenir)

    si t'as un bout de code de la réception coté serveur tu peux la poster ici (ou un lien), avec un peu de chance ca sera lisible
    je ne connais pas assez le rtf pour savoir s'il a lui même un caractère de fin
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut
    Bonsoir Pol63.

    Merci pour ton commentaire.

    T'envoyer un bout de code sera compliquer, car c'est un exemple de chez WinDev et donc il y a des renvois vers les procédures. OK je vais faire au mieux.

    Par ailleurs, j'ai installé un SkocetSniffer.
    Lorsque mon appli serveur tourne, tout est en TCP. alors que les codes en C# m'ouvre une connection vide en UDP puis une en TCP et envoi des packet que je ne peux pas lire sur le serveur.
    Voici une copie de ce que SocketSniffer me donne lors que mon applie en C# demande une connexion au socket.
    Nom : SocketSniffer.jpg
Affichages : 530
Taille : 92,0 Ko

    et voici les codes C# que j'ai :

    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
     
                string input = "$$TEST$$";
                IPHostEntry iphostInfo = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress ipAdress = IPAddress.Parse("127.0.0.1"); //(iphostInfo.AddressList[0];
                IPEndPoint ipEndpoint = new IPEndPoint(ipAdress, 5010);
                Socket clientSocket = new Socket(ipAdress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                try
                {
                    clientSocket.Connect("127.0.0.1", 5010);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                clientSocket.Send(Encoding.ASCII.GetBytes(input));
                input = "BYE";
                clientSocket.Send(Encoding.ASCII.GetBytes(input));
                clientSocket.Close();
    Le serveur ne fait pas la différence entre UFT8 et ASCII, donc je prend l'ASCII.

    Au plaisir de te lire
    Fred2355

  9. #9
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut
    Bonsoir,

    Je viens de constater un nouveau point:
    Le socket C# connecté en 127.0.0.1:5010 est bien connecté mais pas déconnecté malgré l'instruction clientSocket.Close();
    Donc je pense que mon probleme réside bien dans les codes C#.
    De plus, le socket que j'ai écrit ouvre d'abord un UDP puis le TCP.
    Donc je pense que tout réside en premier lieu dans les codes pour ouvrir uniquement une connexion TCP.

    Qui à une idée?
    Merci

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    Salut,
    une simple question comme ça (on sait jamais) :
    Le programme serveur tourne bel et bien sur le même ordinateur que le programme client ?

    Parce que se connecter en 127.0.0.1 c'est se connecter en local (à sois même)

    Si le programme serveur tourne sur une autre bécane il faut mettre l'IP de cette autre bécane

  11. #11
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut
    Bonsoir,

    Effectivment! c'est une bonne question!

    Les applications tournent toutes sur le meme PC avec l'adresse 127.0.0.1 (pour une meilleur comprehension mon lan est en 192.168.0.1/24).

    Donc je pense ne pas avoir commis d'erreur sur ce point.

    N'est il pas?

    Au plaisir de te lire.

  12. #12
    Membre averti
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Novembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Novembre 2013
    Messages : 49
    Par défaut
    Bonsoir à tous,

    Ca y est mon, mais je devrais dire mes applis fonctionnent!
    Grace à vos messages qui m'ont contraint à approfondir mes travaux.

    Maintenant les deux applications dialogues entres elles.

    Je peux fermer ce post.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB 2005]Envoyer des informations
    Par Bacchantes dans le forum VB.NET
    Réponses: 1
    Dernier message: 01/05/2008, 20h09
  2. Envoyer des informations au systeme
    Par hugo1992 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/12/2007, 13h36
  3. [PHP-JS] envoyer des informations à deux pages
    Par insane_80 dans le forum Langage
    Réponses: 2
    Dernier message: 04/10/2006, 14h50
  4. Envoyer des informations à un service Web en javascript
    Par gingman dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/03/2006, 10h46
  5. Réponses: 3
    Dernier message: 28/10/2005, 10h01

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