Toon posts:

[VB] Probleem met Chat

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben bezig met een chat-applicatie via de TCP protocol van winsock. Met meerdere clients, dat werkt maar ik heb een probleem als ik twee clients via de server applicatie met elkaar wil laten communiceren, weet iemand hoe ik dit kan aangeven? :)

edit:

Ik bedoel wanneer er bijv. 10 clients zijn de server weet naar welke hij de text naartoe moet sturen.

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Euhmz, als iedereen een ID nummer heeft, dan laat je de Server kijken naar elke connectie, welke ID-nummer eropzit (in een soort Vector bijhouden).

Dit is iig een soort IM idee. Een chat-server zoals IRC verstuurt gewoon de inkomende berichtjes naar alle verbonden connecties, (niet naar de client die het berichtje verstuurde), aan de hand van de lui die in een chat kanaal zitten. Doe je bv. PRIVMSG #java <je message> dan gaat het berichtje naar iedereen in #java.

Check RFC1459 voor meer informatie over het IRC protocol.

Verwijderd

Topicstarter
OK, bedankt, maar daar heb ik eigenlijk niks aan, ik snap 't niet, enige andere suggesties in min of meer ABN?

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Heb je het al voor elkaar dat de server meerdere clients aankan?

Dan kan je elke verbinding een soort ID nummer geven, dit moet je bijhouden in een lijstje.

Als je een bericht binnen krijgt, en je wilt dit naar iedereen sturen, dan loop je alles langs, en stuur je het bericht daar naar toe.

Als het voor 1 iemand speciaal bedoelt is, dan moet je het ID nummer weten van die verbinding. en dan stuur je daar het bericht naartoe.

voorbeeld:
Dus als je een nickname weet (uniek), dan zoek je de socket-nummer erbij. naar die socket stuur je het berichtje.

hoe je het in VB doet, weet ik niet. (sockets etc..)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 14:33

johnwoo

3S-GTE

MSND over meerdere Winsock connecties mbv Visual Basic:
Accepting More than One Connection Request
The basic server outlined above accepts only one connection request. However, it is possible to accept several connection requests using the same control by creating a control array. In that case, you do not need to close the connection, but simply create a new instance of the control (by setting its Index property), and invoking the Accept method on the new instance.

The code below assumes there is a Winsock control on a form named sckServer, and that its Index property has been set to 0; thus the control is part of a control array. In the Declarations section, a module-level variable intMax is declared. In the form's Load event, intMax is set to 0, and the LocalPort property for the first control in the array is set to 1001. Then the Listen method is invoked on the control, making it the "listening control. As each connection request arrives, the code tests to see if the Index is 0 (the value of the "listening" control). If so, the listening control increments intMax, and uses that number to create a new control instance. The new control instance is then used to accept the connection request.

Private intMax As Long

Private Sub Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001
sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intMax = intMax + 1
Load sckServer(intMax)
sckServer(intMax).LocalPort = 0
sckServer(intMax).Accept requestID
Load txtData(intMax)
End If
End Sub
Zij gebruiken dus een control array om de sockets in te bewaren.. Persoonlijk gebruik ik liever een listening socket en een 'sjabloon' datasocket, en voeg ik nieuwe sockets toe aan een collectie, omdat je een array moeilijker kan doorlopen (je weet niet welke sockets misschien al ge-unload zijn).

Om een user ID aan een socket te binden kun je bijvoorbeeld dat user ID in de Tag property van de socket zetten. Als je dan een bericht wilt versturen naar een bepaalde client doorloop je de socket array (of collection) en als een socket's tag gelijk is aan de user id heb je de goede te pakken :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1