Bonjour

Je tente de développer une mini application client/Serveur grâce aux sockets asynchrones mais malgré plusieurs heures de recherche, impossible de trouver la source de mon erreur.

Lorsque le client se connecte , connexionAcceptCallback est appellée , on récupere le socket actif avec : listensock.EndAccept(asyncResult)
jusque la pas de plantage mais dès que je mets à la suite le activesock.BeginReceive(buff, 0, buff.Length, SocketFlags.None, receiveCallback, activesock);
ca plante ...avec comme erreur :
"la référence d'objet n'est pas definie à une instance d'objet"

EDIT : La fonction BeginSend fonctionne très bien pourtant elle utilise activesock aussi

Voila le code qui provoque ce plantage:
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
class C_Mysocket
    {
        //Classe socket local perso
        private int port;
        Socket listensock; 
        Socket activesock;
        IPEndPoint endpt;
        
        byte[] buff;
        
        

        /*** Fonctions membres ***/
        public C_Mysocket(int _port)
        {
            port = _port;
        }

        public int Start()
        {
            try
            {
                  //Ouverture du socket sur l'adresse locale et le port demandé
                    listensock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    IPHostEntry hostadr = Dns.GetHostEntry(Dns.GetHostName());
                    endpt = new IPEndPoint(hostadr.AddressList[0], port);
                    //Bind à un port , écoute sur ce port et démarre le thread asynchrone
                    listensock.Bind(endpt);
                    listensock.Listen(1);
                    //debut asynchrone - démarrage du thread d'accept | attente de la connection
                    listensock.BeginAccept(new AsyncCallback(connexionAcceptCallback), listensock);
                    return port;
             }
            catch (Exception se)
            {
                MessageBox.Show("Start method error message : "+ se.Message);
                return 0;
            }
        }

 void connexionAcceptCallback(IAsyncResult asyncResult)
        {
            try
            {
                activesock = listensock.EndAccept(asyncResult);
                activesock.BeginReceive(buff, 0, buff.Length, SocketFlags.None, receiveCallback, activesock);
            }
            
            catch (Exception se)
            {
                MessageBox.Show(se.Message);
            }
       }

...


 public void Send(string s)
        {
            try
            {
                buff = ASCIIEncoding.ASCII.GetBytes(s);
                activesock.BeginSend(buff, 0, buff.Length, SocketFlags.None, new AsyncCallback(this.sendCallback), activesock);
            }
            catch (Exception se)
            {
                MessageBox.Show(se.Message);
            }

        }


   private void sendCallback(IAsyncResult asyncResult)
        {
            int send = activesock.EndSend(asyncResult);
            
        }
..

Voila je desespere de trouver ou ca coince

Merci d'avance