Winsock problem

Résolu
tibaw Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 3 décembre 2009 - 14 nov. 2009 à 12:16
oussamadz Messages postés 1 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 5 février 2010 - 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
----------------------------------------

7 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
18 nov. 2009 à 10:39
"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)
3
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
14 nov. 2009 à 16:17
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)
0
tibaw Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 3 décembre 2009
15 nov. 2009 à 19:17
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
0
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
15 nov. 2009 à 20:35
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)
0

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

Posez votre question
tibaw Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 3 décembre 2009
15 nov. 2009 à 22:37
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
0
tibaw Messages postés 7 Date d'inscription samedi 3 octobre 2009 Statut Membre Dernière intervention 3 décembre 2009
18 nov. 2009 à 14:27
t'est genial jte remercie
0
oussamadz Messages postés 1 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 5 février 2010
5 févr. 2010 à 18:28
ohhh winsock
0
Rejoignez-nous