Gå til innhold

Hjelp til klient->server "chat"


Anbefalte innlegg

Prøver å lage et enkelt program som sender en tekstlinje (brukernavn) fra en klient til en server.

 

Får denne feilmeldingen:

Run-time error '40006'

Wrong protocol or conenction state for the requested transaction or request

 

Her er koden min:

 

Server

Private Sub cmdStart_Click()
 tcpServer.LocalPort = txtPort.Text
 tcpServer.Listen
End Sub

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
 Dim strData As String
 tcpServer.GetData strData
 lstMsg.AddItem strData
End Sub

 

Klient

Private Sub cmdSend_Click()
 Dim ipStr, portStr As String
 ipStr = Val(txtIp.Text)
 portStr = Val(txtPort.Text)

 tcpClient.Connect ipStr, portStr
 
 tcpClient.SendData txtBruker.Text
End Sub

nm.zip

Lenke til kommentar
Videoannonse
Annonse

Du har glemt å akseptere den innkommende tilkoblingen. Legg inn to Winsock-kontroller i et prosjekt og kall dem henholdsvis winClient og winServer, samt en kommandoknapp med navn cmdClient. Lim så inn følgende kode:

Option Explicit

 

Private Sub cmdClient_Click()

   

    ' Koble til serveren

    winClient.Connect "localhost", 1337

 

End Sub

 

Private Sub winClient_Connect()

 

    ' Vi er tilkoblet

    winClient.SendData "Hallo verden!"

    DoEvents

 

End Sub

 

Private Sub winClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

 

    ' Vis feilmelding

    MsgBox "Error " & Number & " has occured: " & Description, vbCritical

 

End Sub

 

Private Sub winServer_ConnectionRequest(ByVal requestID As Long)

 

    ' Aksepter innkommende tilkoblingsanmodninger

    winServer.Close

    winServer.Accept requestID

 

End Sub

 

Private Sub winServer_DataArrival(ByVal bytesTotal As Long)

   

    Dim sData As String

   

    ' Hent data

    winServer.GetData sData

   

    ' Vis data

    MsgBox sData

 

End Sub

 

Private Sub Form_Load()

 

    ' Initialiser server

    winServer.LocalPort = 1337

    winServer.Listen

 

End Sub

Lenke til kommentar
Edit: Btw. hvilken port burde jeg bruke med tanke på hvilke som stort sett er åpne på alle pcer? 21?

6317129[/snapback]

Du bør nå helst bruke porter som ikke allerede er opptatt for å unngå konflikt med annen programvare. En kan jo alltids åpne porter i brannmuren dersom det er noe problem. Jeg ville i hvert fall unngått å benytte portnummer under 1000.

Lenke til kommentar
Tviler på at noen kommer til å ha ftp kjørende samtidig som dette programmet, så derfor kan jeg vel bruke port 21? Mer stress for folk å åpne porter enn å skru av ftp-programmet.

6317429[/snapback]

Du kan jo alltids, men fraråder deg det på det sterkeste; mye av poenget med portsystemet er å kunne holde de ulike tjeneste adskilt. Kanskje det beste ville være å gjøre portnummeret justerbar.

Lenke til kommentar

Da må du enten be dem installere Winsock-kontrollen manuelt (link), eller eksempelvis lage et installasjonsprogram som gjør dette automatisk.

 

Blant annet følger programmet Package & Deployment Wizard med Visual Basic 6.0, som jeg vil tro burde være ypperlig for denslags.

 

Ellers kan du jo alltids bruke en erstatning for OCX-kontrollen ved open source-løsninger, så som CSocket. Da behøver du ikke benytte noen av metodene ovenfor.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...