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 :

Comment serialiser sur socket


Sujet :

C#

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Comment serialiser sur socket
    Bonjour,

    Je cherche à transmettre une classe sérialisé sur un socket.
    Mais je ne trouve pas le bon stream
    Je me doute bien que pour la transmission socket il faut utiliser un BinaryFormatter.
    Bref je pédale dans la semoule complet.
    J'ai bien ce code, mais cela sauvegarde dans un fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TextWriter flux = new StreamWriter(Config.NOM_FICHIER, false);
               XmlSerializer serialiser = new XmlSerializer(typeof(Parametres));
               serialiser.Serialize(flux, this.Parametres);
                   flux.Close();
    Je voudrais ne pas passer par un fichier et envoyer la classe directement sur le socket. C'est possible?
    Si oui comment je définis le socket à employer?

    Je pensais pas que je galèrerais à ce point sur ça.

    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    A mon avis le lien ici va t'aider, il montre comment binder ton Socket sur un Stream

    http://www.java2s.com/Tutorial/CShar...etoaclient.htm
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  3. #3
    Membre à l'essai
    Profil pro
    android developer
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : android developer

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    ah sa par contre je peux t'aider..

    http://royalexander.wordpress.com/20...t-programming/


    ce lien ma bien aider pour faire ce que j'ai fait....





    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
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
     
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    using ApplicationLibrary.Exceptions;
    using System.Windows.Forms;
    using log4net;
    using log4net.Config;
    using System.IO;
    using System.Configuration;
     
    namespace ApplicationLibrary.Bean
    {
        /// <summary>
        /// Cette classe constitue la partie Telecom de la classe ConfigurationManager.
        /// Elle permet d'envoyer périodiquement un bean donnée passé
        /// en paramètre lors de l'initialisation de la classe par référence(une section critique(lock{}) 
        /// est nécessaire si ce bean est lu ou écrit ailleurs dans le code).
        /// Cette classe permet aussi de l'envois une seule fois.
        /// Si une erreur survient l'exception est remonter au code appelant.
        /// Pour utiliser cette Classe il faut : 
        /// Setter le bean a envoyer qui doit hériter de AstractBeanSerialisation.
        /// 
        /// </summary>
        public class BeanSenderUtil<T> where T : AbstractBean, new()
        {
            /// <summary>
            /// Cette propriété permet de contrôler l'exécution du thread.
            /// Elle permet de l'arrêter de le relancer.
            /// </summary>
            ManualResetEvent _allDone = new ManualResetEvent(false);
     
            /// <summary>
            /// Cette propriété définit l'intervale d'envois du bean initialisé.
            /// Par défaut cette valeur est fixé à 5 secondes.
            /// </summary>
            private int _sendInterval = 5000;
     
     
            /// <summary>
            /// Cette propriété définit l'adresse ip cible sur
            /// laquelle l'envois du bean va être tenté.
            /// </summary>
            public IPAddress IpAddressCible { get; set; }
     
     
            /// <summary>
            /// Cette propriété permet de définir le bean qui sera sérialiser puis envoyé.
            /// Cette classe par le biais de la technique des classes génériques, 
            /// d'envoyer n'importe qu'elle type de bean, 
            /// pourvu qu'il hérite de la classe AbstractBean fourni dans le projet
            /// et que ce bean a redéfinit sa méthode SetValue.
            /// </summary>
            private T _sendObject;
     
            public T SendObject
            {
                get { return _sendObject; }
                set { _sendObject = value; }
            }
     
     
            public int Port { get; set; }
     
            /// <summary>
            /// Cette propriété définit l'intervale d'envois du bean initialisé.
            /// Par défaut cette valeur est fixé à 5 secondes.
            /// </summary>
            public int SendInterval
            {
                get
                {
                    return _sendInterval;
                }
                set
                {
                    _sendInterval = value;
                }
            }
            /// <summary>
            /// Cette propriété si elle est a 'true' 
            /// va limiter l'envoi du bean a une occurence et va appeler 
            /// la méthode Stop de la classe.
            /// </summary>
            public bool SendOneTime { get; set; }
     
     
            /// <summary>
            /// Cette méthode va permettre de définir par référence le bean a envoyer.
            /// </summary>
            /// <param name="objectToSend"> </param>
            public void SetBeanToSendTheRefWay(ref T sendObject)
            {
     
                SendObject = sendObject;
            }
     
            /// <summary>
            /// Constructeur de la classe.
            /// </summary>
            /// <param name="ipAddress">Adresse Ip cible de la machine vers qui l'on souhaite envoyer le bean.</param>
            /// <param name="port">le port</param>
            /// <param name="sendInterval">l'interval d'envois du bean qui est passer en référence, et qui peut donc être mis a jour dans une autre partie du code de l'application.</param>
            /// <param name="objectToSend">l'objet a envoyer passer par référence qui peut être mise a jour par un autre thread a condition de posé un lock{} dessus par sécurité</param>
            /// <param name="sendOneTime">si cette valeur est a true la thread essayera d'envoyer le bean qu'une seul fois.</param>
            public BeanSenderUtil(IPAddress ipAddress, int port, int sendInterval, ref T sendObject, bool sendOneTime)
            {
                IpAddressCible = ipAddress;
                Port = port;
                SendInterval = sendInterval;
                SendObject = sendObject;
                SendOneTime = sendOneTime;
            }
            public BeanSenderUtil()
            {
     
            }
     
            // Define a static logger variable so that it references the
            // Logger instance named "MyApp".
            private static readonly ILog log = LogManager.GetLogger(typeof(BeanSenderUtil<T>));
     
            /// <summary>
            /// Démarre lme client et essaye d'envoyer un objet sur le serveur
            /// Starts the client and attempts to send an object to the server
            /// </summary>
            public void Start()
            {
                try
                {
                    do
                    {
                        // Set up a simple configuration that logs on the console.
                        BasicConfigurator.Configure();
                        _allDone.Reset();
     
                        // On récupère le chemin du fichier de config
                        // String configFile = Directory.GetCurrentDirectory() + @"\log.config";
     
     
                        /*FileInfo file = new FileInfo(configFile);
                        if (file == null || file.Exists == false)
                            throw new Exception("file log4Net not found.");
     
                        // On remplace le BasicConfigurator par le XmlConfigurator
                        // et on charge la configuration définie dans le fichier log4net.config
                        XmlConfigurator.Configure(file);
                    */
     
                        //BasicConfigurator.Configure();
                        log.Debug("Entering application.");
     
                        Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        IPEndPoint ipEndPoint = new IPEndPoint(IpAddressCible, Port); 
                        sender.BeginConnect(ipEndPoint, Connect, sender);
     
                        log.Debug("Exiting application.");
     
                        _allDone.WaitOne(); //halts this thread until the connection is accepted
     
     
                    } while (!SendOneTime);
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Sender Start : Une erreur réseau est survenue");
                    this.Stop();
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Sender Start :  erreur est survenue");
                    this.Stop();
                }
     
     
            }
     
            public void Stop()
            {
                SendOneTime = true;
                _allDone.Close();
                Thread t = Thread.CurrentThread;
                t.Abort();
            }
     
     
            /// <summary>
            /// Starts when the connection was accepted by the remote hosts and prepares to send data
            /// </summary>        
            public void Connect(IAsyncResult result)
            {
                T sendNow = new T();
     
                sendNow = (T)SendObject;
                sendNow.Socket = (Socket)result.AsyncState;
     
                try
                {
                    sendNow.Socket.EndConnect(result);
                    byte[] buffer = sendNow.Serialize(); //fills the buffer with data
                    sendNow.Socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, Send, sendNow);
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Sender Connect : Une erreur réseau est survenue");
                    this.Stop();
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Sender Connect : Une erreur est survenue");
                    this.Stop();
                }
     
            }
     
            /// <summary>
            /// Fini d'envoyer les données puis attend le SendInterval en millisecondes puis retente d'envoyer
            /// Ends sending the data, waits for a readline until the thread quits
            /// </summary>        
            public void Send(IAsyncResult result)
            {
                try
                {
                    T closesend = (T)result.AsyncState;
                    int size = closesend.Socket.EndSend(result);
                    Console.Out.WriteLine("Send data: " + size + " bytes.");
     
                    // temps entre chaque envois
                    Thread.Sleep(_sendInterval);
                    _allDone.Set(); //signals thread to continue so it sends another message
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Sender Send : Une erreur réseau est survenue");
                    this.Stop();
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Sender Send : Une erreur est survenue");
                    this.Stop();
                }
     
            }
     
        }
     
     
    }


    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
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;
    using ApplicationLibrary.Exceptions;
    using System.Windows.Forms;
     
    namespace ApplicationLibrary.Bean
    {
        public class BeanReceiverUtil<T> where T : AbstractBean, new()
        {
            /// <summary>
            /// Cette propriété permet de contrôler l'exécution du thread.
            /// </summary>
            ManualResetEvent _allDone = new ManualResetEvent(false);
     
            /// <summary>
            /// Cette propriété permet de définir le port sur lequel l'on va recevoir le bean.
            /// Par défaut 1440.
            /// </summary>
            private int _port = 1440;
     
            /// <summary>
            /// Cette propriété définit a true permet de continuer a écouter, 
            /// et si elle est définit a false arrête le "thread", 
            /// et empêche même sont redémarrage.
            /// </summary>
            private bool _listenStartStop = true;
     
            /// <summary>
            /// Cette propriété définit 
            /// le nombre maximum de la liste d'attente du socket d'écoute par défaut a 10.
            /// </summary>
            private int _backlog = 10;
     
            /// <summary>
            /// Constructeur par défaut
            /// </summary>
            public BeanReceiverUtil()
            {
     
            }
     
            /// <summary>
            /// Contructeur pour la définition du bean qui sera reçu.
            /// </summary>
            /// <param name="objectReceived"></param>
            public BeanReceiverUtil(ref T receiveObject)
            {
                ReceiveObject = receiveObject;
            }
     
            /// <summary>
            /// Cette méthode va permettre de définir par référence le bean a envoyer.
            /// </summary>
            /// <param name="objectToSend"> </param>
            public void SetBeanToReceiveTheRefWay(ref T receiveObject)
            {
                ReceiveObject = receiveObject;
            }
     
            /// <summary>
            /// Démarre un serveur qui écoute les connexions.
            /// </summary>
            public void Start()
            {
                try
                {
                    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    listener.Bind(new IPEndPoint(IPAddress.Loopback, _port));
                    while (ListenStartStop)
                    {
                        _allDone.Reset();
                        listener.Listen(Backlog);
                        listener.BeginAccept(Accept, listener);
                        _allDone.WaitOne(); //halts this thread             
                    }
     
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Start : Une erreur réseau est survenue");
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Start : Une erreur est survenue");
                }
     
            }
     
     
            /// <summary>
            /// Démarre quand une connexion entrante a été demandé, 
            /// implicitement cela démarre un thread pour gérer la connexion.
            /// </summary>            
            public void Accept(IAsyncResult result)
            {
                try
                {
                    T obj = new T();
                    obj.Socket = ((Socket)result.AsyncState).EndAccept(result);
                    obj.Socket.BeginReceive(obj.buffer, 0, obj.buffer.Length, SocketFlags.None, Receive, obj);
     
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Accept : Une erreur réseau est survenue");
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Accept : Une erreur est survenue");
                }
            }
     
            /// <summary>
            /// Reçoit les données, les met dans une mémoire tampon et vérifie si il est nécessaire de recevoir à nouveau.
            /// </summary>            
            public void Receive(IAsyncResult result)
            {
                try
                {
                    T obj = (T)result.AsyncState;
                    int read = obj.Socket.EndReceive(result);
                    if (read > 0)
                    {
                        for (int i = 0; i < read; i++)
                        {
                            obj.TransmissionBuffer.Add(obj.buffer[i]);
                        }
     
                        //we need to read again if this is true
                        if (read == obj.buffer.Length)
                        {
                            obj.Socket.BeginReceive(obj.buffer, 0, obj.buffer.Length, SocketFlags.None, Receive, obj);
                        }
                        else
                        {
                            Done(obj);
                        }
                    }
                    else
                    {
                        Done(obj);
                    }
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Receive : Une erreur réseau est survenue");
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Receive : Une erreur est survenue");
                }
     
            }
     
            /// <summary>
            /// Deserializes and outputs the received object
            /// </summary>            
            public void Done(T obj)
            {
                try
                {
                    ReceiveObject.SetValue(obj.DeSerialize<T>());
                    _allDone.Set(); //signals thread to continue 
                    //So it jumps back to the first while loop and starts waiting for a connection again.
                }
                catch (SocketException se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Done: Une erreur réseau est survenue");
                }
                catch (Exception se)
                {
                    MessageBox.Show(se.Message.ToString(), "Receiver Done: Une erreur est survenue");
                }
            }
     
     
     
            public int Backlog
            {
                get
                {
                    return _backlog;
                }
                set
                {
                    _backlog = value;
                }
            }
     
            public bool ListenStartStop
            {
                get
                {
                    return _listenStartStop;
                }
                set
                {
                    _listenStartStop = value;
                }
            }
     
     
            public int Port
            {
                get
                {
                    return _port;
                }
                set
                {
                    _port = value;
                }
            }
     
            public T ReceiveObject { get; set; }
     
     
        }
    }

    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
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net.Sockets;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.IO;
     
    namespace ApplicationLibrary.Bean
    {
        [Serializable]
        public abstract class AbstractBean
        {
            [NonSerialized]
            public Socket Socket;
            [NonSerialized]
            public List<byte> TransmissionBuffer = new List<byte>();
            [NonSerialized]
            public byte[] buffer = new byte[2048];
     
            /// <summary>
            /// Cette méthode va sérialiser et transformer un objet en tableau de bit.
            /// </summary>
            /// <param name="o">objet a sérialiser</param>
            /// <returns>tableau de byte représentant l'objet sérialiser</returns>
            public byte[] Serialize()
            {
                BinaryFormatter bin = new BinaryFormatter();
                MemoryStream mem = new MemoryStream();
                bin.Serialize(mem, this);
                return mem.GetBuffer();
            }
     
            /// <summary>
            /// Cette méthode va désérialiser l'objet de type T.
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public T DeSerialize<T>()
            {
                byte[] dataBuffer = TransmissionBuffer.ToArray();
                BinaryFormatter bin = new BinaryFormatter();
                MemoryStream mem = new MemoryStream();
                mem.Write(dataBuffer, 0, dataBuffer.Length);
                mem.Seek(0, 0);
                return (T)bin.Deserialize(mem);
            }
     
            /// <summary>
            /// Il faut redéfinir cette méthode afin que 
            /// le bean soit capable de se copier sans perdre la référence.
            /// Lors de la réception, dans la classe Réseau.
            /// </summary>
            /// <param name="o">Le bean a setter  "Attention il doit être du même type que le bean setter"</param>
            public abstract void SetValue(Object o);
     
     
     
     
     
        }
    }

    Ici ta ton bean que tu veux envoyer... depuis qu'il hérite de abstract bean et que tu redéfini la méthode setvalue bin les sender bean et receive bean marche \o/. voili voilou
    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
     
    [Serializable]
        public class ConfBean : AbstractBean
        {
     
            #region Propriete a transmettre
     
            public string LoginArgausSql { get; set; }
     
            public string Password { get; set; }
     
            #endregion
     
     
     
     
            public ConfBean()
            {
     
     
            }
     
     
            public override void SetValue(object o)
            {
                ConfBean confBean = (ConfBean)o;  
     
                this.Login = confBean.Loginl;
                this.Password = confBean.Password;
            }
     
     
        }

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    en utilisant .net remoting ca évite de réinventer la roue et de taper énormément de lignes de code ....
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Au lieu d'utiliser un FileWriter il faut récupérer le NetworkStream de ton socket et le passer en premier argument de Serialize.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Merci à Vous,
    Je vais regarder ce que vous avez transmis.

    Skyounet, j'avais réussi à l'envoyer directement sur un netStream, mais pour que le serveur traite le message, et qu'il sache quoi en faire, il a besoin d'un "code" transmis en début de message, qui indiquera à quoi sers le message reçu 'verrouillage d'enregistrement, document à traiter....
    Mais vu que je n'arrive pas à lui transmettre un code, le message arrive, certes mais il pars à la poubelle.

    J'avais pensé au net remoting, mais, j'ai pas encore eut le temps de m'y affairer.

    Je vais regarder tout cela, de ce pas.

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Et WCF ? C'est possible dans ton cas ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut Skyounet

    Au lieu d'utiliser un FileWriter il faut récupérer le NetworkStream de ton socket et le passer en premier argument de Serialize.
    C'est exactement ce qui est décrit dans le lien que j'avais donné non ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par olibara Voir le message
    Salut Skyounet



    C'est exactement ce qui est décrit dans le lien que j'avais donné non ?
    Ah oui il semblerait. J'avais cliqué dessus pourtant
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Skyounet,

    Mon stage se termine d'ici 3 semaines, et pour WCF, cela ne va pas être possible. Etant données que j'aurais une soutenance à passer, je ne voudrais pas avoir à parler de quelque chose que je viens "à peine de découvrir". Donc WCF on va éviter (pour l'instant).

    Déjà que j'ai pas des masses le temps de faire tout ce que j'ai à faire (rapport de stage, préparation du powerpoint de la soutenance, projet du stage à "stabiliser").

  11. #11
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Pol63,
    j'ai trouvé un tuto concernant le NetRemoting, j'ai compris le principe (ouverture d'un canal, enregistrement auprès des services, appel de méthodes distantes, activation dobjet distant), mais je ne vois pas du tout comment l'implémenter dans mon cas.

  12. #12
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Tu peux pas rajouter un champs dans ton objet qui indique le code pour savoir quoi faire avec ?

    Si non tu peux pas créer une nouvelle classe avec le code puis une propriété avec l'objet à transmettre ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  13. #13
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Merci, pour votre aide, (désolé de répondre si tard), mais j'ai vu cela avec mon maitre de stage, et il souhaite que l'on laisse tomber cela et que je concatène l'objet en string et que je transmette le string à mon socketemetteur.

    Cela dit si j'avais un peu plus de temps j'aurais utilisé la technique de Krypto. Car c'est mon socketmetteur qui est foireux.

    Cela sera une amélioration à apporter après mon départ.

    J'aurais mieux fait de faire un bean qui accepte un object et qui le sérialize sur un networkStream.

    Merci tout le monde.

  14. #14
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Regarde du côté de JSON alors.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

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

Discussions similaires

  1. Comment ecrire sur la meme ligne avec la commane ECHO
    Par juflata dans le forum Windows
    Réponses: 3
    Dernier message: 24/11/2015, 09h06
  2. Comment imprimer sur un réseau Linux
    Par Medo_free dans le forum Réseau
    Réponses: 5
    Dernier message: 19/10/2004, 13h45
  3. [Transparent] - Comment dessiner sur 2 TImage ?
    Par TOTO32 dans le forum Langage
    Réponses: 15
    Dernier message: 08/08/2004, 01h06
  4. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 00h19
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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