jeoff | Bonjour,
Depuis mon dernier topic j'ai (un peu) avancé.
J'ai réussi à créer une connexion entre mon serveur et mon client en mode synchrone.
Problème, mon serveur/client sont bloqués pendant la réception/envoi de messages.
J'ai donc regardé du côté asynchrone. Mais je suis un peu largué sur les histoires de CallBack.
Après de nombreuses recherches je suis tombé sur plusieurs sites sympathiques dont celle-ci : http://vincentlaine.developpez.com [...] one/vbnet/
Plutôt que de repartir de 0, (j'ai essayé mais sans succès ) je voudrai utiliser le code proposé puis le modifier afin d'en faire une dll.
Le hic c'est que je n'arrive pas à récupérer les messages du genre "client connecté" depuis la dll. Je ne sais pas comment modifier le code pour la dll ni comment modifier le code pour recevoir les msg dans mon appli finale.
Voici un extrait du code original avec les parties "litigieuses".
Code :
- Imports System
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Text
- Imports System.Windows.Forms
- Namespace Serverside
- Public Class ServerClass
- Private SocketServer As Socket
- Private SocketClient As Socket
- Private LocalsocketClientIsShutingDown As Boolean = False
- Private readbuf As Byte()
- Private sendbuf As Byte()
- Private listBox As ListBox
- Private Delegate Sub DelegateDisplay(ByVal message As String)
- Private dlgDisplay As DelegateDisplay = New DelegateDisplay(AddressOf DisplayMessage)
- Private Sub ReceiveMessageCallback(ByVal asyncResult As IAsyncResult)
- Dim displaydata As String()
- Try
- Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
- Dim read As Integer = socket.EndReceive(asyncResult)
- If read > 0 Then
- displaydata = New String() {"Client dit : " + Encoding.ASCII.GetString(Me.readbuf)}
- Me.listBox.Invoke(dlgDisplay, displaydata)
- Buffer.SetByte(Me.readbuf, 0, 0)
- Me.SocketClient.BeginReceive(Me.readbuf, 0, Me.readbuf.Length, SocketFlags.None, AddressOf ReceiveMessageCallback, Me.SocketClient)
- End If
- If read = 0 AndAlso Not Me.LocalsocketClientIsShutingDown Then
- socket.Close()
- displaydata = New String() {"Socket distante fermée."}
- Me.listBox.Invoke(dlgDisplay, displaydata)
- Me.SocketServer.BeginAccept(AddressOf ConnectionAcceptCallback, Me.SocketServer)
- End If
- Catch ex As SocketException
- displaydata = New String() {ex.Message}
- Me.listBox.Invoke(dlgDisplay, displaydata)
- End Try
- End Sub
- Private Sub SendCallback(ByVal asyncResult As IAsyncResult)
- Dim listdata As String()
- Try
- Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
- Dim send As Integer = socket.EndSend(asyncResult)
- listdata = New String() {"Message envoyé (" + send.ToString() + " octets)"}
- Me.listBox.Invoke(dlgDisplay, listdata)
- Catch ex As SocketException
- listdata = New String() {ex.Message}
- Me.listBox.Invoke(dlgDisplay, listdata)
- End Try
- End Sub
- Private Sub DisplayMessage(ByVal message As String)
- Me.listBox.Items.Add(message)
- Me.listBox.SelectedIndex = Me.listBox.Items.Count - 1
- End Sub
- End Class
- End Namespace
|
EDIT : Je ne comprends pas l'utilité de la listbox
Je ne sais pas comment rediriger "listdata" "displaydata" ou que faire du sub "displaymessage".
Merci de partager vos connaissances  Message édité par jeoff le 06-04-2005 à 15:40:32
|