Winsock problem [Résolu]

tibaw 7 Messages postés samedi 3 octobre 2009Date d'inscription 3 décembre 2009 Dernière intervention - 14 nov. 2009 à 12:16 - Dernière réponse : oussamadz 1 Messages postés vendredi 5 février 2010Date d'inscription 5 février 2010 Dernière intervention
- 5 févr. 2010 à 18:28
voila je possede visual basic 2008 express edition et je cherche a creer un chat par winsock . je fais la demarche normale trouvée dans des tutos mais je tombes sur cette erreur :
Exception de HRESULT : 0x800A9C54
Pouvez vous m'aider ??

Consultez la fin de ce message pour plus de détails sur l'appel du débogage
juste-à-temps (JIT) à la place de cette boîte de dialogue.

************** Texte de l'exception **************
System.Runtime.InteropServices.COMException (0x800A9C46): Exception de HRESULT : 0x800A9C46
à MSWinsockLib.IMSWinsockControl.SendData(Object data)
à AxMSWinsockLib.AxWinsock.SendData(Object data)
à WindowsApplication2.Form1.Button3_Click(Object sender, EventArgs e) dans C:\Users\thibaud\Desktop\tchat local\test2\test2\Form1.vb:ligne 40
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
à System.Windows.Forms.Control.WndProc(Message& m)
à System.Windows.Forms.ButtonBase.WndProc(Message& m)
à System.Windows.Forms.Button.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Assemblys chargés **************
mscorlib
Version de l'assembly : 2.0.0.0
Version Win32 : 2.0.50727.3603 (GDR.050727-3600)
CodeBase : file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
test2
Version de l'assembly : 1.0.0.0
Version Win32 : 1.0.0.0
CodeBase : file:///C:/Users/thibaud/Desktop/tchat%20local/test2/test2/bin/Debug/test2.exe
----------------------------------------
Afficher la suite 

7 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 18 nov. 2009 à 10:39
+3
Utile
"est-ce que cela marches quand meme ?" : Quoi, qui marche quand même ?
Le composant Winsock ? Oui, si le composant existe sur ta machine, c'est le même que sous XP
PortCom : Je dirai que ce nom ressemble plus à un composant lié aux ports série et pas au Socket.

Les composants COM sont pratiques mais appartiennent au passé et ne seront surement plus utilisables dans quelques générations de Windows.
Si tu commences en programmation, intéresse-toi plutôt à la technologie disponible dans les Framework et, dans ton cas, au Socket.

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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 14 nov. 2009 à 16:17
0
Utile
Salut
Je pense qu'il y a quelque chose à regarder sur la ligne désignée ici :
à WindowsApplication2.Form1.Button3_Click(Object sender, EventArgs e) dans C:\Users\thibaud\Desktop\tchat local\test2\test2\Form1.vb:ligne 40

Sans ton code, difficile de te dire ce qui cloche.
Ne colle que ce qui est en rapport le socket, pas tout ton programme, sinon personne n'aura le courgae de lire.

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)
Commenter la réponse de cs_Jack
tibaw 7 Messages postés samedi 3 octobre 2009Date d'inscription 3 décembre 2009 Dernière intervention - 15 nov. 2009 à 19:17
0
Utile
Imports MSWinsockLib.StateConstants
Imports AxMSWinsockLib.AxWinsock
Imports MSWinsockLib.ProtocolConstants
Imports MSWinsockLib.ErrorConstants
Imports AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent
Imports AxMSWinsockLib.AxWinsockEventMulticaster
Imports AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent
Imports AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent
Imports AxMSWinsockLib.DMSWinsockControlEvents_SendProgressEvent
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' set localport for listening ( you can change it
' whatever you want )

sck.Close()
sck.LocalPort = 0
sck.Bind(0, sck.LocalIP) ' listen for others to connect you
sck.Listen()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Button2.Text = "arreter" Then
sck.Close()
Else

sck.Close()
sck.Connect(TextBox1.Text, 0)
End If
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim sdata As String
sData = TextBox2.Text
sck.Protocol = sckTCPProtocol
sck.RemoteHost = TextBox1.Text
sck.RemotePort = 0
sck.Connect()
sData = TextBox2.Text
Call sck.SendData(sData & vbCrLf)
End Sub


Private Sub sck_ConnectionRequest(ByVal requestID As Long, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles sck.ConnectionRequest
sck.Close() ' if not
' closed the connection close it
sck.Accept(requestID) ' accept the requestid
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If sck.CtlState = sckConnected Then
Button2.Text = "arreter"
End If
If Not sck.CtlState = sckConnected Then
Button2.Text = "connecter"
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label2.Text = sck.LocalIP
Label1.Text = "port 0"
End Sub

Private Sub sck_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles sck.DataArrival
Dim vData As String
Call sck.GetData(vData)
ListBox1.Items.Add(vData)
End Sub

Private Sub sck_SendComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles sck.SendComplete
MsgBox("sended")

End Sub
End Class
Commenter la réponse de tibaw
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 15 nov. 2009 à 20:35
0
Utile
Heureusement que je t'ai demandé de ne pas tout coller ...
Le code intéressant est dans Button3_Click
Première chose à faire avant de toucher aux réglages d'un Socket, c'est de vérifier qu'il n'est pas encore connecté, sinon, c'est l'erreur assurée.
Tu tentes de te connecter à ta destination sur le port 0 : Ce n'est pas possible.
Il n'y a que dans LocalPort que tu peux (dois) mettre 0 pour qu'il utilise un port désigné automatiquement.
Quand tu te connectes, il faut impérativement lui dire sur quel port (80 pour HTTP, 21 pour FTP, ...) ou n'importe quel port entre 1000 et 65535.

Deuxième chose, bien que tu aies demandé un .Connect, rien ne dit que la connexion va se faire.
Avant de continuer et d'envoyer des données, il faut vérifier l'état de ton Socket.

Pour vouloir utiliser le Socket ActiveX au lieu de System.Net.Sockets ?

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)
Commenter la réponse de cs_Jack
tibaw 7 Messages postés samedi 3 octobre 2009Date d'inscription 3 décembre 2009 Dernière intervention - 15 nov. 2009 à 22:37
0
Utile
merci beaucoup a toi ^^
franchement ca m'aides bien a comprendre
mais je suis sous vista , est-ce que cela marches quand meme ?
je me suis renseigné sur le composant portcom n'est-ce pas similaire ?
amicalement,
thibaud
Commenter la réponse de tibaw
tibaw 7 Messages postés samedi 3 octobre 2009Date d'inscription 3 décembre 2009 Dernière intervention - 18 nov. 2009 à 14:27
0
Utile
t'est genial jte remercie
Commenter la réponse de tibaw
oussamadz 1 Messages postés vendredi 5 février 2010Date d'inscription 5 février 2010 Dernière intervention - 5 févr. 2010 à 18:28
0
Utile
ohhh winsock
Commenter la réponse de oussamadz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.