Avatar billede jps2mt Nybegynder
11. december 1999 - 15:11 Der er 14 kommentarer og
1 løsning

WinSock server til MultiConnect

Hejsa...

Jeg er ved at lave noget chat-sjov, hvor jeg nu står og skal lave en chat-server, hvor klienterne connecter op til..

Jeg har bygget det hele op i WinSock til VB6 Enterprise Edition...

Er der en der kan fortælle mig om og hvordan man kan gøre så serveren kan modtage multiple connections på SAMME port??? (Jeg bruger TCP)

/JPS2MT
Avatar billede spinner Nybegynder
11. december 1999 - 15:37 #1
Du kan ikke have mere end en connection pr. port.

Det du skal gøre er at lave Winsock controlen i et array. Så sætter du Winsock(0) til at lytte efter "opkald", og beder f.eks. WinSock(1) om at åbne forbindelsen på en anden LocalPort.

På den måde bliver klienterne smidt ud på forskellige porte på serveren, men kalder alle op til samme port.

  /Spinner
Avatar billede jps2mt Nybegynder
11. december 1999 - 15:45 #2
spinner >> Og det er stadig kun nødvendigt at ha' en port sat op i klienten??

/JPS2MT
Avatar billede jps2mt Nybegynder
11. december 1999 - 16:10 #3
spinner >> Kan du avt. give et eksempel på hvordan man får winsock til at åbne forbindelsen på en anden port??

/JPS2MT
Avatar billede spinner Nybegynder
11. december 1999 - 16:31 #4
ja, det er kun nødvendigt med en port til klienten - jeg laver lige et eksempel til dig...
Avatar billede jps2mt Nybegynder
11. december 1999 - 16:48 #5
spinner >>> Hvis du kan, så må du også godt se om du kan forklare mig, hvordan jeg kan sende det data der er modtaget åp en port, ud på en anden port...Altså imellem klienterne...

/JPS2MT
Avatar billede spinner Nybegynder
11. december 1999 - 16:49 #6
Her er en kode der viser ovenstående:

Private Instances As Long

Private Sub Form_Load()
    Instances = 0
    WinSock(0).LocalPort = 5000
    WinSock(0).Listen
End Sub

Private Sub WinSock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    If Index = 0 Then
        Instances = Instances + 1
        Load WinSock(Instances)
        WinSock(Instances).LocalPort = 0
        WinSock(Instances).Accept requestID
    End If
End Sub

Programmet åbner en ny WinSock på hver Request. Du skal indsætte et WinSock-objekt på din form, og sætte dets navn til "Winsock" og Index til "0" - så skulle det virke.

  /Spinner
Avatar billede spinner Nybegynder
11. december 1999 - 17:06 #7
k - jeg laver koden, så må du se om du kan læse noget ud af den - ellers må du jo spørge igen.

    /Spinner
Avatar billede spinner Nybegynder
11. december 1999 - 18:14 #8
k - her er en kode der sender det serveren modtager tilbage til de andre klienter (evt. også den klient der er afsender):

Private Instances As Long

Private Sub Form_Load()
  Instances = 0
  WinSock(0).LocalPort = 5000
  WinSock(0).Listen
End Sub

Private Sub WinSock_Close(Index As Integer)
  Unload WinSock(Index)
End Sub

Private Sub WinSock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  If Index = 0 Then
    Instances = Instances + 1
    Load WinSock(Instances)
    WinSock(Instances).LocalPort = 0
    WinSock(Instances).Accept requestID
  End If
End Sub

Private Sub WinSock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  WinSock(Index).GetData tekst, vbString
  For x = 1 To Instances
    If (WinSock(x).State = 7) And x <> Index Then
    'Hvis afsenderen også selv skal modtage det sendte ser linjen således ud:
    'If (WinSock(x).State = 7) Then
      WinSock(x).SendData tekst
      For y = 1 To 10000
        DoEvents
      Next y
    End If
  Next x
  Debug.Print "Control no. " & Index & ": " & tekst  '(overvåg trafik)
End Sub

Det skulle vist være det.

  /Spinner.
Avatar billede spinner Nybegynder
11. december 1999 - 18:16 #9
Hov, rettelse:

For y = 1 to 10000
  DoEvents
Next y

skal fjernes...

  /Spinner

Avatar billede jps2mt Nybegynder
11. december 1999 - 18:34 #10
Takker spinner...
Det virker sørme...*S*

100 pt. på vej til dig..:*GG*
Avatar billede spinner Nybegynder
11. december 1999 - 18:43 #11
np - sæ'føli virker det *S*
Avatar billede jps2mt Nybegynder
12. december 1999 - 02:25 #12
spinner >> Jeg har fundet et problem i det du har der...

Hvis vi er 3 der connecter op til serveren, så er det KUN de 2 SIDSTE der har connectet op, der kan se hvad der bliver skrevet...

Har du ICQ?? Så kan du muligvis selv være med til at teste det en dag...

/JPS2MT
Avatar billede spinner Nybegynder
12. december 1999 - 11:41 #13
jps2mt >> naah. men jeg tror jeg ved hvor fejlen ligger. mit ICQ UIN# er: 1068322

  /Spinner
Avatar billede kantoraza Nybegynder
16. oktober 2002 - 20:37 #14
Må jeg lige komme med en kommentar?

Jeg ser ikke logiken i at bruge flere winsockker, altså arrays/indexes. Jeg bruger bare arrays i variabler!

Fx hver gang en bruger logger sig ind på serveren, så bliver en variabel en størrer:

AntalKlienter = AntalKlienter + 1
Klient(AntalKlienter) = Winsock.RemoteHost

Og hver gang serveren skal sende en besked, så laver man bare en for next løkke:

For n = 0 to antalklienter
  winsock.remotehost = klient(n)
  winsock.senddata "Du modtager en besked"
next n
Avatar billede kantoraza Nybegynder
16. oktober 2002 - 20:38 #15
Jeg synes at denne måde er nemmere!

Jeg ved ikke om jeg har overset noget, men jeg har lavet adskillige programmer på denne måde.

Se evt.

www.friserverplads.dk/northcode/opgaver/chat.zip

Mvh.
NorthCode
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester