Yritän väsätä tämmöst chatti ohjelmaa mis on winsock.
klientti:
Private Sub ohjelma_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load klientti.RemoteHost = klientti.LocalHostName klientti.LocalPort = 4500 End Sub Private Sub yhdistä_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles yhdistä.Click klientti.Close() klientti.Connect() ' täs on virhe End Sub Private Sub sendi_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sendi.TextChanged klientti.SendData(sendi.Text) End Sub Private Sub klientti_ConnectEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles klientti.ConnectEvent MsgBox("yhistetty") End Sub Private Sub klientti_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles klientti.DataArrival Data = "" klientti.GetData(data) saapuu.Text = data End Sub End Class
servu:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load servu.LocalPort = 4500 servu.Listen() ohjelma.Show() End Sub Private Sub servu_ConnectionRequest(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles servu.ConnectionRequest servu.Close() servu.Accept(0) End Sub Private Sub sendi_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sendi.TextChanged servu.SendData(sendi.Text) End Sub Private Sub servu_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles servu.DataArrival servu.GetData(saapuu.Text) End Sub End Class
Tommost se valittaa:A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
Tai ei valita mut sinne immediate windowiin tulee tommone
Eli yhdistykses tulee ajonaikainen virhe mikä vikana?
http://koti.mbnet.fi/elkku/errori1.JPG
otin tommose kuvan siit jos selventää ja jos joku osais auttaa.
Eiks näist kukaa ny tiä?
oon jo kahen päivän ajan ettiny msdn:nstä mut ei löydy. Enkä tiä mitää muut foorumii mist vois kysellä
No jos kokeilisit vaikka käsitellä tuon virhetilanteen. Mielestäni tuossa virheilmoituksessa sanotaan, että se heittää TargetInvocationExceptionin, jota ei ole käsitelty.
En tiedä VB.netistä, sen virheen käsittelystä tai debuggausominaisuuksista sen kummemmin, mutta jonkinlaisen debuggitulosteen avulla tuosta voisi saada enemmän irti (esim. mahdollisten muuttujien arvot kun virhe tapahtuu).
Äkkiä katottuna ainakin:
klientti.LocalPort = 4500 -> klientti.RemotePort = 4500 (en oo sitten 100% varma kun on .net).
Ei kai toi winsock vb:n winsockista juurikaan poikkea.
Vaihdoin ton:
Private Sub yhdistä_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles yhdistä.Click klientti.Close() klientti.Connect() ' täs on virhe End Sub
tommoseks:
Private Sub winsock1_ConnectionRequest(ByVal requestID As Long) If Winsock1.State <> SckClosed Then Winsock1.Close() End If Winsock1.Accept(requestID) End Sub
ja nyt valittaa:Error 1 'State' is a type in 'AxMSWinsockLib.AxWinsock' and cannot be used as an expression.
ja:
Error 2 Name 'SckClosed' is not declared.
Ton toisen tajuun et se ei oo esitelty mut tota ekaa en oikee kässää, et mitä pitäis tehä?
Nyt mennään vähän hakoteillä...
winsock1_ConnectionRequest(...) on yhteyksien hyväksymis tapahtuma. Toisekseen se ei liity millään tavalla klienttiin, vaan on vain serverin puolella tarvittava aliohjelma.
Mielestäni ensimmäisen viestin koodissa ei ole mitään muuta vikaa kuin se, että asetat klientille paikallisen portin(localport), vaikka et sitä mihinkään tarvitse(vain serveri tarvitsee paikallisen portin eli sen portin mitä se kuuntelee mahdollisten yhteyspyyntöjen varalta) ja jätä määrittämättä portin, johon haluaisit yhdistää(remoteport). Eli muuta ekan viestisi klientin koodin rivi
klientti.LocalPort = 4500
Muotoon
klientti.RemotePort = 4500
Kuten jo edellämainitsin.
Samaa valittaa edelleen :(
Aihe on jo aika vanha, joten et voi enää vastata siihen.