Bonjour tout le monde,

Savez vous s'il est possible, à travers le même objet socket, d'utiliser le mode de fonctionnement synchrone et asynchrone pour l'envoi et la réception de messages.

J'ai réalisé un client qui reçoit des informations d'un serveur de façon synchrone. Mais une fois ces informations reçues, je dois passer ce client en mode de réception asynchrone car je ne maîtrise l'arrivée des prochaines données qui vont être envoyées depuis le serveur.

Mon problème: Quand je souhaite passer en mode asynchrone, le client passe sans raison dans la fonction appelée par la méthode BeginReceive puis plante au moment du passage dans la fonction client.EndReceive(ar);

Le code lié au fonctionnement asynchrone :

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
  public static void Receive()
  {
   try
   {
    StateObject state = new StateObject();
    state.workSocket = serveur;

    serveur.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
        new AsyncCallback(ReceiveCallback), state);
   }
   catch (Exception e)
   {
    Console.WriteLine(e.ToString());
   }
  }

//fct appelée par BeginReceive

  private static void ReceiveCallback(IAsyncResult ar)
  {
   try
   {
    state = (StateObject)ar.AsyncState;
    client = state.workSocket;

    bytesRead = client.EndReceive(ar);

    if (bytesRead > 0)
    {
     state.sb.Append(Encoding.Default.GetString(state.buffer, 0, bytesRead));
  .......................

Merci d'avance pour vos réponses
Cyrill