Bonjour,

Je suis actuellement en train d'essayer de réaliser un convertisseur Ethernet vers RS232 et vice versa avec un module EMX (pour ceux qui connaissent). C'est un µC de type arm qui se programme en C# via visual C# Express et le .NET microframework 4.1.

Je rencontre actuellement beaucoup de problèmes avec la comm Ethernet (avec la comm série aussi mais chaque choses en son temps ).

Voici mon code actuellement :
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
using System;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO.Ports;
using Microsoft.SPOT;
using Microsoft.SPOT.Net;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.FEZ;
using GHIElectronics.NETMF.Hardware;
using GHIElectronics.NETMF.Native;
 
 
namespace MFConsoleApplication1
{
    public class Program
    {
        public static void Main()
        {
 
            // Mise en route du thread de l'Ethernet
            Thread Thread_Communication_Handler;
            Thread_Communication_Handler = new Thread(Thread_Communication);
            Thread_Communication_Handler.Start();
            Thread_Communication_Handler.Priority = System.Threading.ThreadPriority.Highest;
 
            // Create a thread handler for the DEBUG
            Thread LED_Debug_Handler;
            LED_Debug_Handler = new Thread(LED_Debug);
            LED_Debug_Handler.Start();
            //new Thread(LED_Debug).Start();
 
            Debug.Print("Amazing!");
 
            Thread.Sleep(Timeout.Infinite);
        }
        /// <summary>
        /// Thread de debug
        /// </summary>
        public static void LED_Debug()
        {
            while (true)
            {
                LED.Write(!LED.Read());
 
                Thread.Sleep(200);
            }
        }
 
        /// <summary>
        /// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ///// GESTION DE LA COMMUNICATION ETHERNET
        /// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// </summary>
        public static void Thread_Communication()
        {
            byte[] Messages_From_SPV;
            byte[] Messages_To_SPV;
            byte[] Tab_Temp;
 
            /***********     INITIALISATION DE LA COMMUNICATION ETHERNET     ***********/
            // First, make sure we actually have a network interface to work with!19.
            if (Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces().Length < 1)
            {
                Debug.Print("No Active network interfaces. Bombing out.");
                Thread.CurrentThread.Abort();
            }
 
            // OK, retrieve the network interface
            Microsoft.SPOT.Net.NetworkInformation.NetworkInterface NI = Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0];
 
            // Set the StaticIP
            NI.EnableStaticIP("192.168.1.1", "255.255.255.0", "192.169.1.1");
 
            // Create the socket
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
            // Bind the listening socket to the port
            IPAddress hostIP = IPAddress.Parse(NI.IPAddress);
            //IPEndPoint ep = new IPEndPoint(hostIP, 80);
            IPEndPoint ep = new IPEndPoint(hostIP, 3000);
            listenSocket.Bind(ep);
 
            // Start listening
            listenSocket.Listen(1);
 
            // Main thread loop
            while (true)
            {
                try
                {
                    Debug.Print("listening...");
                    Socket newSock = listenSocket.Accept();
                    ///// DEBUG /////
                    byte[] messages = Encoding.UTF8.GetBytes("Salut, ça marche ?");
                    newSock.Send(messages);
                    Debug.Print("Accepted a connection from " + newSock.RemoteEndPoint.ToString());
                    newSock.Close();
                    for (int i = 0; i < 6; i++)
                    {
                        Socket newSock_Send = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        Debug.Print("NewSock crée");
                        byte[] Tab = new byte[] { 192, 168, 1, 10 };
 
                        IPAddress Adresse = new IPAddress(Tab);
 
                        newSock_Send.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.1"), 3000));
                        Debug.Print("NewSock connecté");
                        Messages_To_SPV = Encoding.UTF8.GetBytes("Messages");
                        newSock_Send.Send(Messages_To_SPV);
                        Debug.Print("Message envoyé");
 
                        newSock_Send.Close();
                        Debug.Print("NewSock fermé");
                    }
                }
                catch (Exception e)
                {
                    Debug.Print(e.Message);
                }
            }
        }
    }
}
Pour l'instant ce bout de code ne fait pas grand chose de particulier. Mon but est simplement de comprendre les différents aspects de la communication par Ethernet. Donc pour le moment j'essaie d'envoyer un trame de données à la connection d'un PC (en mode serveur si j'ai bien compris. C'est moi qui attend et l'autre qui se connecte) puis derrière j'essaie d'envoyer une trame au PC en mode client (j'ai fermé la première connexion et j'en ouvre une nouvelle pour discuter avec le PC).

Bon alors voilà mon problème actuellement est que lorsque je me connecte avec un PC via IE sur ma carte je reçois bien le message "Salut, ça marche ?" mais je me retrouve avec un exception au moment de créer mon nouveau socket newSocket_Send.
Voilà le message d'erreur :
#### Exception System.Net.Sockets.SocketException - CLR_E_FAIL (3) ####
#### Message:
#### Microsoft.SPOT.Net.SocketNative::poll [IP: 0000] ####
#### System.Net.Sockets.Socket:oll [IP: 0011] ####
#### System.Net.Sockets.Socket::Connect [IP: 0029] ####
#### MFConsoleApplication1.Program::Thread_Communication [IP: 00ba] ####
#### SocketException ErrorCode = 10035
#### SocketException ErrorCode = 10035
Une exception de première chance de type 'System.Net.Sockets.SocketException' s'est produite dans Microsoft.SPOT.Net.dll
#### SocketException ErrorCode = 10035
#### SocketException ErrorCode = 10035
Je ne comprend pas ce qui ne va pas. Je déclare mal mon socket ? Ou alors j'ai pas le droit de déclarer un socket en mode client après en avoir déclaré un en mode serveur ? Je suis un peu paumé et le message d'erreur ne m'aide pas vraiment .

Question annexe : Quelqu'un saurait me dire quels sont les différences entre le .NET framework et le .NET microframework ? Et ou je peux en trouver la liste exhaustive ? Parce que j'ai l'impression qu'il me manque des surcharges de fonctions par rapport aux tutos que j'ai pu trouver sur le net.