Toon posts:

[VB6, VB.NET] Winsock

Pagina: 1
Acties:
  • 141 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb hier 2 programmatjes op 2 PCs geschreven. Programma op computer 1 is geschreven in VB6 en leest en visualiseerd 8 XY laser sensoren uit via RS458, dat is allemaal klaar en werkt. Programma op computer 2 is geschreven in VB.NET en moet die waarden over TCP/IP binnenhalen uit computer 1 om ze vervolgens via OPC aan te bieden aan een HMI/SCADA pakket.

Nu wou ik hiervoor de Winsock control gebruiken. Die heb ik dus toegevoegd in mijn VB6 programma. Voor het .NET programma gebruik ik Winsock.NET. De PCs hebben netwerkverbinding en hangen via een switch in een LAN

De code in VB6 om even te testen of ik een string kan over pompen:
Visual Basic 6:
1
2
3
4
5
formMain.wsockData.RemoteHost = xxx.xxx.xxx.xxx
formMain.wsockData.RemotePort = 30
formMain.wsockData.Connect
formMain.wsockData.SendData "aap"
formMain.wsockData.Close


De code in .NET om de string binnen te halen:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub netStartCommunicatie()
    wsockData.LocalPort = 30
    wsockData.Listen()
End Sub

Private Sub wsockData_ConnectionRequest(ByVal sender As Winsock_Control.Winsock, ByVal requestID As System.Net.Sockets.Socket) Handles wsockData.ConnectionRequest
    wsockData.Accept(requestID)
End Sub

Private Sub wsockData_DataArrival(ByVal sender As Winsock_Control.Winsock, ByVal BytesTotal As Integer) Handles wsockData.DataArrival
    Dim strData As String
    wsockData.GetData(strData)
    MsgBox(strData)
End Sub


Het probleem is dat hij verbinding maakt, maar ik datasend niet kan gebruiken. Met een connection state changed event vang ik de volgende gebeurtenissen op (in machine 2, .NET):
Listening => ConnectionPending => Connected.

De machine 1 (met VB6) geeft op het moment dat ik de senddata method gebruik deze foutmelding:
"Run-time error '40006' Wrong protocol or connection state for the requested transaction or request"

Als ik debug en kijk naar wscockData.State dan is die 6.... zegt me niets eigenlijk, volgens google moet daar iets uitkomen als bv sckClosed etc oid?

De XP firewall op machine 2 (.NET, Windows XP) heeft me de eerste keer om toestemming gevraagd toen ik het progsel gecompileerd en gedraaid had, daar heb ik toestemming voor gegeven. Belachelijk genoeg is dat een kantoor machine van hier en kan ik door de grouppolicies even niet de firewall uitzetten, maar zou dat het probleem wel zijn? Machine 1 draaid Windows 2000 en heeft geen firewall. Ik communiceer over tcp poort 30, en aangezien er dus wel een connection request en een connectie plaatst vind denk ik zelf niet aan de firewall.

Welke stommiteit heb ik nu weer over het hoofd gezien?

[ Voor 22% gewijzigd door Verwijderd op 23-03-2007 15:54 ]


Verwijderd

Topicstarter
Fixed; pas sendata aanroepen als je geverified hebt dat er een connectie is, nu verstuurd hij de data te snel en dan krijg je die fout.