tibaw
Messages postés7Date d'inscriptionsamedi 3 octobre 2009StatutMembreDernière intervention 3 décembre 2009
-
14 nov. 2009 à 12:16
oussamadz
Messages postés1Date d'inscriptionvendredi 5 février 2010StatutMembreDerniè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
----------------------------------------
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
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")
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
tibaw
Messages postés7Date d'inscriptionsamedi 3 octobre 2009StatutMembreDerniè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