Gå til innhold

Ikke bare klient-til-server chat


Anbefalte innlegg

Hmm.. for fortsatt samma feil :shrug: Har jeg copy-pasta litt feil eller skal koden se sånn ut:

 

Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
   'check for tcpserver state if it is NOT CLOSED then accept request

Dim Buff&
' En klient har spurt om å koble seg til, allocer en control og aksepter tilkoblingen
' For å spare på ressurser sjekker vi om noen controler er ledige:

Buff = GetFreeControl

If Buff < 0 Then
Buff = tcpServer.Count
Load tcpServer(Buff)
End If

tcpServer(Buff).Accept requestID

end sub

tcpServer(Buff).Accept requestID gir fortsatt error

Lenke til kommentar
Videoannonse
Annonse

Sorry for alt bryet, men nå har jeg nesten klart det! :D Det er bare det at når den andre klienten prøver å logge seg på får jeg en error, Allready open:

 

Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
   'check for tcpserver state if it is NOT CLOSED then accept request
  If Index = 0 Then
     intMax = intMax + 1
     Load tcpServer(intMax)
     tcpServer(intMax).LocalPort = "1234"
     tcpServer(intMax).Accept requestID

   Dim data
   data = "123098"
   tcpServer(1).SendData data
   
  End If

End Sub

Load tcpServer(intMax) ble merket gult. Jeg fant denne koden hos en som har gjort noe det samma, bare at han klarte det :blush: Noen som vet hva som kan være galt?

Lenke til kommentar
  • 4 måneder senere...

Ok, min tur til å prøve. :p Har ikke VB på jobb så jeg får ikke testa, men troooor jeg skulle klare det alikevel, hehe.

 

Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)

'Index vil altid være 0 da tcpServer(0) er den eneste winsock'en som lytter.

'Sjekke om det er en ledig socket innimellom rekka et sted (1, 2, 3 og 5, 6 er opptatt. Da bruker vi 4)
For a% = 1 to tcpServer.Count - 1
 If tcpServer(a%).State <> 7 Then 'State = 7 betyr at en klient er tilkobla.
   tcpServer(a%).Close 'Bare for å unngå tull.
   tcpServer(a%).Accept RequestID 'Godta

   tcpServer(a%).SendData "Velkommen!" & vbCrLf 'Denne er jeg ikke sikker på, men hvis du kan plassere den under tcpServer_Connect() bør du nok det.

   Exit Sub 'Da var vi ferdig her.
 End If
Next a%

'Kontrollere maks antall mulige klienter og evt. lage en ny socket.
If tcpServer.Count =< 100 Then 'Er antall winsock-dingser er mindre eller lik 100?
 tcpServer(tcpServer.Count).Load 'Lag en ny winsock-dings.
 tcpServer(tcpServer.Count).Accept RequestID
End If
End Sub

 

Dette skal funke så vidt jeg kan se, og du slipper å loade 10/100/200 sockets (eller hvor mange sockets du måtte ønske når formen loader. Den sjekker om en av de som finnes allerede er ledige. Hvis ingen er det, sjekker den om den har lov til å lage fler, har den det Loader den en til og Accepter på den.

Lenke til kommentar

Lenge siden jeg prøvde dette og da skjønte jeg ikke hva et array var, men det gjør jeg nå. Kan to winsocker i et array bruke samme port? Hvis de kan det blir det egentlig ikke noe problem, men hvis de ikke kan det, må jo klienten også skifte port når han kobler opp :hmm:

Lenke til kommentar

Du kan også prøve å bruke ocx kontrolleren TTOSock, som forenkler en del ting :)

 

Der har du en server som lytter på en port. Np en connectionrequest kommer sette du den Id'en den setter tiol brukeren i en array, når en annen bruker sender en melding, sender du en SendData "teksten" Id.

 

Spør på msn vis du lurer på mer :)

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...