Winsock et Antivirus

Doktos Messages postés 5 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 19 juillet 2010 - 9 juil. 2010 à 15:51
Doktos Messages postés 5 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 19 juillet 2010 - 19 juil. 2010 à 19:22
Bonjour,

Je communique avec des balances via le port ethernet de mon PC (sous windows XP).
Tout marche bien tant que mon antivirus (kaspersky) est activé. Si je le désactive, j'obtiens alors l'erreur '40006: État de connexion ou de protocole erroné pour la transaction ou la requête requise' lors de la commande "Client.SendData".

Quelqu'un saurait-il pourquoi cela marche avec l'antivirus et pas sans ? De plus, je n'arrive pas à faire fonctionner ce programme à partir d'un autre PC (toujours sous XP), donc si quelqu'un a une solution, je suis preneur.

Le code que j'utilise se trouve ci-dessous.

Merci d'avance.

------------------
Dim RequestID As Long

Dim WatchDog As Integer

Dim Data As String

Dim IP_adresse(4) As String





Private Sub Form_Load()


MainForm.Width = 5145



Timer1.Interval = 100

WatchDog = 0



' Déclaration des adresses IP



IP_adresse(0) = "192.168.1.1"

IP_adresse(1) = "192.168.1.2"

IP_adresse(2) = "192.168.1.3"

IP_adresse(3) = "192.168.1.4"





Client.Close



End Sub







Private Sub BTenvoi_click() 'Debut de la communication au clic sur bouton envoi


Dim Buffer As String

Dim Rep_ok As Integer

Dim Rep_error As Integer



TEMP = Time



' Connexion à la balance suivant le choix



If RadioCOM1.Value = True Then

Client.Connect IP_adresse(0), 8000

DoEvents
ElseIf RadioCOM2.Value = True Then

Client.Connect IP_adresse(1), 8000

DoEvents

ElseIf RadioCOM3.Value = True Then

Client.Connect IP_adresse(2), 8000

DoEvents

Else

Client.Connect IP_adresse(3), 8000

DoEvents

End If



'envoi de la commande à la balance



WatchDog = 0

Buffer = ""




DoEvents

Client.SendData TextCommande.Text & Chr(13) & Chr(10)



Timer1.Enabled = True

debut = Time

Text1.Text = 0

Text1.Refresh





Do

DoEvents



Client.GetData Data 'On récupère la réponse de la balance

Buffer = Buffer & Data




Text1.Text = Text1.Text + 1



Loop Until WatchDog = 1


Timer1.Enabled = False

Text1.Text = Len(Buffer)





TextReponse.Text = Buffer
WatchDog = 0





Client.Close

Exit Sub



End Sub





Private Sub Timer1_Timer()

WatchDog = WatchDog + 1



End Sub

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 juil. 2010 à 19:30
Salut
Puisque le problème est extérieur au programme, cet étalage de ligne ne sert pas.

S'agit-il de la version antivirus ou celle intégrant un parefeu ?
Je pense qu'il s'agit de cette dernière version qui, contrairement au parefeu de Windows, joue son rôle de protection.

Dans le logiciel, dans ses menus, il y a forcement un endroit où tu donnes des autorisations de sortie et d'entrée des ports TCP.
A toi de voir quels ports tu utilises et qu'il faut déclarer dans ce logiciel.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Doktos Messages postés 5 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 19 juillet 2010
12 juil. 2010 à 15:11
Bonjour,

Merci pour ta réponse. Cependant, je ne suis pas convaincu que le problème soit externe au programme.

Mon antivirus ne comprend pas de parefeu et le parefeu windows est désactivé. De plus, le problème arrive quand l'antivirus est désactivé, donc dans un cas où il n'y a normalement pas de problèmes d'autorisation de port (non ?).

De plus une version différente du programme mais qui fait le même chose marche bien.

Je me dis que c'est le DoEvents avant le .SendData qui peut poser des problèmes. Est-ce possible ?

Merci.
0
Doktos Messages postés 5 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 19 juillet 2010
12 juil. 2010 à 19:21
Bon en fait c'est bien l'antivirus qui bloque. Il faut que je lui autorise le contrôle du port que j'utilise pour que la communication fonctionne. Du coup sans antivirus ou sur un autre PC qui n'a pas le même antivirus, ça marche pas.
C'est plutôt embêtant et pas très clair pour moi tout ça.
0
Doktos Messages postés 5 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 19 juillet 2010
13 juil. 2010 à 12:17
Bon je ne trouve toujours pas de solution.

Je n'arrive pas à faire fonctionner mon code à partir d'un autre PC. Ce n'est peut-être pas qu'un problème d'antivirus ou d'autorisation de port.

Voici, ci-dessous, un code différent qui fait la même chose et qui marche, lui , à tous les coups (avec et sans antivirus, avec et sans firewall).

Si quelqu'un peut me dire pour ça marche bien dans ce cas et pas dans l'autre (cf. code ci-dessus), je suis preneur.

Merci.


Dim Buffer As String

Dim RequestID As Long

Dim WatchDog As Integer

Dim cport As Integer

Dim Data As String

Dim IP_adresse(4) As String











Private Sub Form_Load()



MainForm.Width = 5145



Timer1.Interval = 1000

WatchDog = 0



IP_adresse(0) = "192.168.1.1"

IP_adresse(1) = "192.168.1.2"

IP_adresse(2) = "192.168.1.3"

IP_adresse(3) = "192.168.1.4"





Client.Close




End Sub





Sub Client_DataArrival(ByVal bytesTotal As Long)



Timer1.Enabled = True

debut = Time

Text1.Text = 0

Text1.Refresh





Do

DoEvents




Client.GetData Data

Buffer = Buffer & Data



Text1.Text = Text1.Text + 1



Loop Until WatchDog = 1 'Rep_error Or Rep_ok Or



Timer1.Enabled = False

Text1.Text = Len(Buffer) ' Time - debut




TextReponse.Text = Buffer

WatchDog = 0

Client.Close



Exit Sub



End Sub



Private Sub Client_connect()

Dim Buffer As String

Dim Rep_ok As Integer

Dim Rep_error As Integer





WatchDog = 0

Buffer = ""




Client.SendData TextCommande.Text & Chr(13) & Chr(10)






End Sub



Private Sub RadioCOM1_Click()

Dim cport As Integer



End Sub





Private Sub RadioCOM2_Click()

RadioCOM1_Click

End Sub



Private Sub RadioCOM3_Click()

RadioCOM1_Click

End Sub

Private Sub RadioCOM4_Click()

RadioCOM1_Click

End Sub




Private Sub BTenvoi_click()



TEMP = Time



If RadioCOM1.Value = True Then



Client.Connect IP_adresse(0), 8000



cport = 1

ElseIf RadioCOM2.Value = True Then

Client.Connect IP_adresse(1), 8000

cport = 2

ElseIf RadioCOM3.Value = True Then

Client.Connect IP_adresse(2), 8000

cport = 3

Else

Client.Connect IP_adresse(3), 8000

cport = 4



End If




End Sub






Private Sub Timer1_Timer()

WatchDog = WatchDog + 1



End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Doktos Messages postés 5 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 19 juillet 2010
19 juil. 2010 à 19:22
Bon j'ai résolu mon problème en glissant un

While Client.State <> sckConnected
DoEvents
Wend

après la demande de connexion, c'est à dire après :

Client.Connect IP_adresse(1), 8000 et à la place du simple DoEvents.

Plus de problème avec l'anti-virus comme ça...

Merci.
0
Rejoignez-nous