Bonsoir à tous,
Je rencontre des problème avec les connexions IP (socket ou tcpclient) en mode asynchrone.
Ci-dessous un exemple du code (recup sur gg, mais qui semble fonctionnel) :
http://www.java2s.com/Tutorial/VB/04...cketClient.htm

ce qui se passe ou pas, d'ailleurs, je n'ai rien en retour de ma commande envoyé, ou bien j'ai le résultat de la commande lors de l'envoie de la commande suivante, mais rien en "même" temps.
là mon code :
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
Imports System
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Imports System.IO
Imports System.Text
 
Public Class TestAsync_2
 
    Public myConnect As Socket
    Dim bteAccept(65536) As Byte
    Dim bteSend(65536) As Byte
 
    Dim MessageInfo As String = "rien"
    Dim MessageSender As String = "message to send"
    Dim MessageReceive As String = ""
 
    'Dim MyHostName As String = "localhost"
    Dim iPort As Integer = 8594
 
 
    Private Sub TestAsync_2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub btnConnectSendReceive_Click(sender As Object, e As EventArgs) Handles btnConnectSendReceive.Click
        ' connexion
        Connect()
        logs(MessageInfo)
        SendCommand("0 protocol peptalk" & vbLf) ' protocol peptalk noevents
        'Receive()
        'logs(MessageReceive)
 
        SendCommand("1 get /storage/shows/NEWSA_MasterNewsNew/playlists/carousel/elements" & vbLf)
        Receive()
        logs("Retour message = " & MessageReceive)
 
        CloseConnexion()
 
    End Sub
 
    Private Sub BtnClose_Click(sender As Object, e As EventArgs) Handles BtnClose.Click
        CloseConnexion()
    End Sub
 
    Private Sub logs(ByVal message As String)
        RichTextBox1.AppendText(vbCrLf & message)
    End Sub
 
 
    Public Sub Connect()
        Dim myThread As New Thread(New ThreadStart(AddressOf ConnectStart))
        myThread.Start()
        'ConnectStart()
    End Sub
 
    Private Sub ConnectStart()
        Dim bidEndPoint As IPEndPoint = New IPEndPoint(IPAddress.Parse("127.0.0.1"), iPort)
        myConnect = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        Try
            Dim myAsyncCallBack As New AsyncCallback(AddressOf ConnectEnd)
            myConnect.BeginConnect(bidEndPoint, myAsyncCallBack, myConnect)
            MessageInfo = "Test SocketDial = connecté"
        Catch ex As SocketException
            MessageInfo = "Error:TestSocketDial: Connection error = " & ex.Message
        End Try
    End Sub
 
    Private Sub ConnectEnd(ByVal pIAsyncResult As IAsyncResult)
        myConnect.EndConnect(pIAsyncResult)
    End Sub
    Public Sub CloseConnexion()
        myConnect.Close()
    End Sub
 
    Public Sub SendCommand(ByVal cmd As String)
        MessageSender = ""
        MessageSender = cmd
        Dim myThread As New Thread(New ThreadStart(AddressOf SendStart))
        myThread.Start()
    End Sub
    Private Sub SendStart()
        Dim myAsyncCallBack As New AsyncCallback(AddressOf SendData)
        bteSend = Encoding.ASCII.GetBytes(MessageSender)
        myConnect.BeginSend(bteSend, 0, bteSend.Length, SocketFlags.DontRoute, myAsyncCallBack, myConnect)
    End Sub
    Private Sub SendData(ByVal pIAsyncResult As IAsyncResult)
        Dim intSend As Integer
        intSend = myConnect.EndSend(pIAsyncResult)
        'txtMessage.Text += vbCrLf + "Message sent" + intSend.ToString + " bytes "
    End Sub
 
 
    Public Sub Receive()
        Dim myThread As New Thread(New ThreadStart(AddressOf ReceiveStart))
        myThread.Start()
    End Sub
    Private Sub ReceiveStart()
        Dim myAsyncCallBack As New AsyncCallback(AddressOf ReceiveData)
        myConnect.BeginReceive(bteAccept, 0, 65536, 0, myAsyncCallBack, myConnect)
        'txtMessage.Text += vbCrLf + "Receive"
    End Sub
    Private Sub ReceiveData(ByVal pIAsyncResult As IAsyncResult)
        Dim intByte As Integer
        intByte = myConnect.EndReceive(pIAsyncResult)
        If intByte > 0 Then
            MessageReceive &= Encoding.ASCII.GetString(bteAccept)
        End If
    End Sub
 
End Class
je vous avoue que je suis un peu perdu et si une Âme charitable pouvait me fournir des infos ou me dire ce qui ne vas pas, j'en serai ravie.
Au final, je souhaite pouvoir ouvrir la connexion, send/receive qlq commands, puis close, le tout sans bloquer le thread principal.
Pour une connexion synchrone, je le bloque que quelque ms, donc pas grave, mais je souhaite qlq chose de sur et qui ne plantera pratiquement pas... humm challenge
Merci

Patrick