Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0379: Chat mit mehreren Clients mittels Winsock

 von 

Beschreibung 

Diese kleine Beispiel zur Erstellung eines Chatprogramms mit mehreren Clients baut auf dem Tutorial "Das Winsock-Control" auf.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [4,3 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------ Anfang Projektdatei MultiChat.vbp  ------------
' Die Komponente ' (mswinsck.ocx)' wird benötigt.
' Die Komponente 'Microsoft Rich Textbox Control 6.0 (richtx32.ocx)' wird benötigt.
' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (MSCOMCTL.OCX)' wird benötigt.

'---------- Anfang Formular "Chat" alias Chat.frm  ----------
' Steuerelement: Windows Socket "WinSock" (Index von 0 bis 0)
' Steuerelement: Rahmensteuerelement "frmData"
' Steuerelement: Textfeld "txtPort" auf frmData
' Steuerelement: Textfeld "txtHostIP" auf frmData
' Steuerelement: Textfeld "txtNick" auf frmData
' Steuerelement: Beschriftungsfeld "lblPort" auf frmData
' Steuerelement: Beschriftungsfeld "lblHost" auf frmData
' Steuerelement: Beschriftungsfeld "lblNick" auf frmData
' Steuerelement: Schaltfläche "cmdSend"
' Steuerelement: Statusbar "stBar"
' Steuerelement: RichTextBox "rftReceive"
' Steuerelement: RichTextBox "rtfSend"
' Steuerelement: Rahmensteuerelement "frmActAs"
' Steuerelement: Schaltfläche "cmdGo" auf frmActAs
' Steuerelement: Schaltfläche "cmdClient" auf frmActAs
' Steuerelement: Schaltfläche "cmdServer" auf frmActAs


' Dieses Beispiel ist ein kleiner Chat ohne großes Protokoll.
' Um dies zu realisieren muß man einfach das WinSock Control
' mit dem Index 0 versehen und schon hat man eine Collection
' aus dem Winsock gemacht.
' Des Weiteren handelt es sich um ein Programm, dass sowohl den
' Server oder den Client machen kann, einfach nur den
' entsprechenden Knopf drücken, chatten kann man in beiden Modi.

Option Explicit

Dim boolServer As Boolean

Private Sub cmdClient_Click()
    ' Als Client identifizieren und die Möglichkeiten vorgeben
    boolServer = False
    cmdServer.Enabled = False
    cmdClient.Enabled = False
    cmdGo.Enabled = True
End Sub

Private Sub cmdGo_Click()
    Dim I As Integer
    ' Loge ich mich gerade ein ?
    
    If cmdGo.Caption = "Go" Then
        ' Erst mal die Einstellungen eifrieren
        txtNick.Enabled = False
        txtHostIP.Enabled = False
        txtPort.Enabled = False
        cmdGo.Caption = "Stop"
        
        ' Bin ich Server ?
        If boolServer = True Then
            WinSock(0).LocalPort = txtPort.Text
            WinSock(0).Listen
            stBar.SimpleText = "Status: Listening"
        Else
            WinSock(0).RemotePort = txtPort.Text
            WinSock(0).RemoteHost = txtHostIP.Text
            WinSock(0).Connect
            stBar.SimpleText = "Status: Connecting to " & txtHostIP.Text & ":" & txtPort.Text
        End If
        
        
    ' Ich logge mich gerade aus
    Else
        ' Bin ich Server ?
        If boolServer = True Then
            ' Erst mal alle Verbindungen schließen und unnötige WinSocks entladen
            For I = 1 To WinSock.Count - 1
                WinSock(I).Close
                Unload WinSock(I)
            Next I
        Else
            WinSock(0).Close
        End If
        
        ' Jetzt wieder alles in den Urzustand versetzen
        txtNick.Enabled = True
        txtPort.Enabled = True
        txtHostIP.Enabled = True
        cmdGo.Caption = "Go"
        cmdGo.Enabled = False
        cmdClient.Enabled = True
        cmdServer.Enabled = True
        stBar.SimpleText = "Status: Offline"
    End If
End Sub

Private Sub cmdSend_Click()
Dim strMessage As String
    
    strMessage = "{" & txtNick.Text & "}:" & rtfSend.Text
    
    ' Bin ich Server
    If boolServer = True Then
        SendMessage strMessage
        rftReceive.Text = rftReceive.Text & vbCrLf & strMessage
    Else
        If WinSock(0).State = 7 Then WinSock(0).SendData strMessage
    End If
    
    rtfSend.Text = ""
    
End Sub

Private Sub cmdServer_Click()
    
    ' Erst mal die Buttons ändern
    cmdClient.Enabled = False
    cmdGo.Enabled = True
    cmdServer.Enabled = False
    
    ' Jetzt bin ich Server
    boolServer = True
End Sub

Private Sub WinSock_Close(Index As Integer)
    If Index = "0" Then
        stBar.SimpleText = "Status: Offline"
    Else
        stBar = "Status: Verbunden mit " & WinSock.Count - 1 & " Client(s)."
    End If
End Sub

Private Sub WinSock_Connect(Index As Integer)
    
    ' Jetzt soll man ja wissen, daß man drinnen ist
    stBar.SimpleText = "Status: Connected to " & txtHostIP.Text & ":" & txtPort.Text
End Sub

Private Sub WinSock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    ' Ein neues WinSock laden und die Verbindung übernehmen lassen
    Dim intZähler As Integer
    
    intZähler = WinSock.Count
    Load WinSock(intZähler)
    WinSock(intZähler).LocalPort = txtPort.Text
    WinSock(intZähler).Accept requestID
    stBar.SimpleText = "Status: Verbunden mit " & WinSock.Count - 1 & " Client(s)."
End Sub

Private Sub WinSock_DataArrival(Index As Integer, ByVal bytesTotal As Long)

    Dim strMessage As String

    ' Nachricht holen
    WinSock(Index).GetData strMessage

    ' Bin ich der Server? Dann weiterleiten
    If boolServer = True Then SendMessage strMessage

    ' Ich mags auch sehen
    rftReceive.Text = rftReceive.Text & vbCrLf & strMessage
End Sub

Private Sub SendMessage(Message As String)
    Dim I As Integer
    
    ' Weiterleiten an die anderen clients
    For I = 1 To WinSock.Count - 1
        
        ' Erst mal schauen ob die Verbindung steht
        If WinSock(I).State = 7 Then WinSock(I).SendData Message
    Next I
End Sub

Private Sub WinSock_Error(Index As Integer, 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)

    If Index < 0 Then
        WinSock(Index).Close
        Unload WinSock(Index)
        rftReceive.Text = rftReceive.Text & vbCrLf & _
            "{System}: Verbindung zu einem Host abgebrochen."
    Else
        WinSock(Index).Close
        rftReceive.Text = rftReceive.Text & vbCrLf & _
            "{System}: Dich hats gerade gegrillt."
        cmdServer.Enabled = True
        cmdClient.Enabled = True
        cmdGo.Caption = "Go"
        cmdGo.Enabled = False
        stBar.SimpleText = "Status: Offline wegen Verbindungsproblem."
    End If
End Sub
'----------- Ende Formular "Chat" alias Chat.frm  -----------
'------------- Ende Projektdatei MultiChat.vbp  -------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 45 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von riccle am 19.02.2011 um 17:46

Hallo,
beim erstellen der .exe bzw. dem Veröffentlichen bekomme ich folgende Fehlermeldung:

Das Projekt konnte nicht erstellt werden!
Die Methode '~' für das Objekt '~' ist fehlgeschlagen

Vielleicht hat jemand eine Idee.

Grüße riccle!

Kommentar von yannick am 29.12.2009 um 23:53

da ist noch ein fehler im selben bereich:

1 Private Sub WinSock_Close(Index As Integer)
2 If Index = "0" Then
3 stBar.SimpleText = "Status: Offline"
4 Else
5 Unload WinSock(Index)
6 stBar = "Status: Verbunden mit " & WinSock.Count - 1 & " Client(s)."
7 End If
8 End Sub

In der Zeile 6 wird versucht, die Statusbar auf "Status: Verbunden mit " & WinSock.Count - 1 & " Client(s)." zu setzen, aber es muss ja der Statusbartext gesetzt werden.

1 Private Sub WinSock_Close(Index As Integer)
2 If Index = "0" Then
3 stBar.SimpleText = "Status: Offline"
4 Else
5 Unload WinSock(Index)
6 stBar.SimpleText = "Status: Verbunden mit " & WinSock.Count - 1 & " Client(s)."
7 End If
8 End Sub

Kommentar von explo1t am 21.08.2006 um 23:43

Private Sub WinSock_Close(Index As Integer)
If Index = "0" Then
stBar.SimpleText = "Status: Offline"
Else
stBar = "Status: Verbunden mit " & WinSock.Count - 1 & " " & _
"Client(s)."
End If
End Sub

#################

in dem bereich ist ein kleiner "fehler" nach dem ausloggen einzelner clients wird am server immernoch die maximale anzahl von eingeloggten clients angezeigt. da stehen je nachdem auch 4 wenn nur noch 1ner drauf ist.

zu beheben ist das mit folgender zeile. im unteren else bereich

Private Sub WinSock_Close(Index As Integer)
If Index = "0" Then
stBar.SimpleText = "Status: Offline"
Else
'########################
Unload Winsock(Index)
'########################
stBar = "Status: Verbunden mit " & WinSock.Count - 1 & " " & _
"Client(s)."
End If
End Sub


ansonsten sehr netter tipp ;) hat mir selbst gut geholfen für n anderes projekt.

Kommentar von Tobias am 08.08.2006 um 18:38

Hi klappt dieser tipp auch über das internet? Bei mir klappt es nur über mein Netzwerk!

Kommentar von Sanitoeter No1 am 03.04.2006 um 16:30

Kann man nicht einfach einen der PCs als Server benutzen? Oder wie in der Kommandozeile: net send <netzwerknamen> <nachricht>?

Kommentar von Mr. Samuraner am 02.03.2006 um 21:12

Hi @ All
Ich habe folgendes Problem:
Ich habe ein Netzwerk mit 25 Rechnern.
Ich mache den Server.
Und 3 andere Wählen sich mit dem gleichen Port bei mir ein!
Aber ich kann nur mit dem letzten der sich eingewählt hat Chatten, obwohl in der statusleiste steht das man mir 3 Clients verbunden ist.
Die anderen können schreiben und abschicken, aber sie selbst sehen nicht was sie schreiben und bekommen auch keine Nachricht.
Wo liegt das Problem, kann mir jemand helfen?
Bittttttteeeeeeee!!!

Kommentar von Uli Hecht am 30.01.2006 um 15:12

Das mit dem Server ist mein Problem.
Wir haben zum Beispiel 3 Rechner im Netz. Wenn ich meinen PC als Server für mein Chat Programm verwenden würde, könnten die restlichen zwei nur schreiben, wenn mein PC an ist.

@Denis: Ein Steuerelement das RTF Dateien anzeigen kann, oder man kann auch selbst formatierten Text darauf anzeigen. Klick auf Projekt -> Komponenten. Aktiviere "Microsoft Rich Textbox Control" um es zu verwenden.

Kommentar von GundeCK am 23.08.2005 um 13:03


Hallo !

Erstmal Lob für diesen Code !
Habe einige Fragen zu dem Umgang mit dem Chat.
Und zwar möchte ich mit diesem Chat mit jemandem chatten,
der ebenfalls einen Internet-Anschluß hat, jedoch genauso
wie ich sich innerhalb eines lokalen Netzwerkes befindet.
Folgende Probleme sehe ich:
Woher weiß ich die IP-Adresse, die ich zum chatten mit
meinem Gegenüber verwenden muß, bzw. wie kann er sich mit
mir verbinden ? Da er in einem lokalen Netzwerk ist, so
wie ich, sind unsere IP-Adressen jeweils ungefähr
192.168.0.1 und somit würde man ja immer versuchen im
eigenen Netzwerk zuzugreifen. Muß ich eventuell die IP-
Adresse vom jeweiligen Netzwerk-Server verwenden ? Ich habe
leider mit der Programmierung von WinSock nicht viel
Erfahrung und bitte darum um Hilfe.

Danke

GundeCK

Kommentar von mm am 08.05.2005 um 12:51

ja

Kommentar von Denis am 30.03.2005 um 10:53

hi,
wollte frage was RichTextBox heißen soll?
Was ist das für ein Steuerelement?

Danke
Denis

Kommentar von Amlor am 28.12.2004 um 13:01

Hi Folks

Das Beispiel funktioniert bei mir super.. hab aber ein Problem.. so bald ich von VB eine Verbindung nach Java aufbauen will (oder umgekehrt.. von Java nach VB) dann bekomm ich zwar ein Connect noch hin, aber das Versenden von Nachrichten klappt nicht.. hat da jemand nähere Infos zu.. die Java Socket soll ja auf die WinSock aufgebaut sein, von daher kann der Fehler ja nicht all zu weit her sein..

so long

Amlor

Kommentar von God'sfriend am 29.04.2004 um 17:57

Des geht net. Fehler beim laden.

Kommentar von MastaDJ am 12.01.2004 um 14:08

zitat:

Hi, ich habe dieses Tutorial mal als Anleitung genommen um eine eigenes Chatprogramm zu schreiben.

Allerdings kann ich in der Winsock_DataArrival - Sub den Parameter Index nicht hinzufügen, ich bekomme jedesmal die Meldung: "Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen"

Weiß irgendjemand was ich machen kann?
Liegt das vielleicht an einer zu alten oder zu neuen mswinsck.ocx? Wenn das der Fall ist bitte ich jemanden mir eine funktionierende zuzuschicken.

Danke im Vorraus, trombi

Zitat ende:

Ja genau das selbe Problem habe ich auch aber nur bei der Winsock_Close (Index As Integer).

Noch keine Lösung gefunden?

Kommentar von Jonas am 21.11.2003 um 22:11

An TheME: Du musst, glaube ich, mindestens die Professional Edition haben, um das Winsock Control verwenden zu können, aber ich kann mir irren.

Wenn das Control allerdings mal funktioniert hat, kann es sein, das du deine Lizenzinformationen irgenwie gelöscht hast, frag mich jetzt aber bloß nicht, wo du die herkriegst.

Kommentar von Refizul am 13.11.2003 um 09:36

zu Raiko Meinhardt: rein theoretisch geht es auch ohne :p nur dann müsstest du immer noch irgendwo im netz ne resource haben, die dir die ip adressen aller ! clients bereitstellt... so das jeder client quasi als server/client funktioniert. wird daher zu umfangreich ;)

der server übernimmt die aufgabe des datenaustausches zwischen den clients, und dient als "globale" vermittlungsstelle... d.h. alle clients connecten auf diesen einen server, und der übermittelt an alle verbundenen clients die nachrichten.

Kommentar von Raiko Meinhardt am 28.10.2003 um 11:04

Ich habe eine Frage ist zum Programmieren eines Chattes mit win Sock ein Server nötig?? und wenn ja welche aufgabe hat er???

Kommentar von Andreas Müller am 31.08.2003 um 10:48

Hallo,

ich habe den CHat so Programmiert wie es oben steht. Nur wie kann ich die Client anzeige Aktualiesieren?

Wie kann ich Clients kicken oder bannen?
(Dies sollte nur vom Server aus möglich sein)

Wie kann ich einen Log schreiben lassen?

Bitte schreibt mir eine E-Mail an andreas@andreas-trier.de

Wenn ihr mir helfen könnt.

THX

Kommentar von Mustafa Kemmer am 21.05.2003 um 19:13

Können sie mir einen helfs beispiel zu log daten schreiben und an meinen E-Adresse schicken danke

Kommentar von TheME am 08.03.2003 um 19:19

Ich habe ein Problem mit dem Winsock: Ich kann es nicht in mein Projekt einbauen. Ich erhalte jedes mal, wenn ich es hineinziehen will eine Fehlermeldung. Da steht dann, dass ich nicht die nötige Lizenz habe! Was ist denn la los??

Kommentar von trombi am 21.02.2003 um 15:18

Hallo d00s, natürlich geht das auch übers Internet, TCP/IP heisst ja nicht umsonst Transmission Control Protocol/INTERNET Protocol :)

Ob das auch per UDP geht weiß ich nicht, aber eigentlich gibt es auch garkeinen Grund das Programm über UDP laufen zu lassen, da TCP ja eh funktioniert.

Kommentar von D00s am 20.02.2003 um 21:28

Hey Leutz!
Habe eine sehr wichtige frage:
Das ist jetzt ein TCP/IP verbindungsaufbau!
Und das geht auch über das internet ?
Dann hab ich noch eine Frage, wenn ich das mit UDP Packeten mache, geht das dann auch über das internet, bei mir hat es nicht geklappt???
Was kann ich da machen, oder weiß wer wo ich etwas finde mit UDP?

mfg d00s

Kommentar von trombi am 19.02.2003 um 17:03

Hi, ich habe dieses Tutorial mal als Anleitung genommen um eine eigenes Chatprogramm zu schreiben.

Allerdings kann ich in der Winsock_DataArrival - Sub den Parameter Index nicht hinzufügen, ich bekomme jedesmal die Meldung: "Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit demselben Namen"

Weiß irgendjemand was ich machen kann?
Liegt das vielleicht an einer zu alten oder zu neuen mswinsck.ocx? Wenn das der Fall ist bitte ich jemanden mir eine funktionierende zuzuschicken.

Danke im Vorraus, trombi

Kommentar von M@xximizer am 04.12.2002 um 15:24

Zu Sohail vom 24.10.2002,10:34
Um formatierten Text zu senden, muss beim Senden anstatt von [strMessage = "{" & txtNick.Text & "}:" & rtfSend.Text]
die Eigenschaft '.TextRTF' benutzt werden, also:
'strMessage = "{" & txtNick.Text & "}:" & rtfSend.TextRTF' !
Es versteht sich von selbst, dass auch beim Empfänger 'rftReceive.Text = rftReceive.Text & vbCrLf & strMessage' die neue Eigenschaft ('.TextRTF') verwendet werden muss!

ZeeYaa
M@xximizer

Kommentar von B|ackCat am 29.10.2002 um 17:44

Hi, ich hab grad einen ähnlcihen chat programmiert und dabei herausgefunden das in der SendMessage sub vor derm Next i ein "DoEvents" fehlt, da der text amsonsten nur an den letzten client geschickt wird... wollte das nur für die ewigkeit festhalten damit ihr euch ned wundert warum der tip oben ned klappt

Kommentar von Sohail am 24.10.2002 um 10:34

Hi,

Weiss hier jemand, wie ich auch Formatierten Text via Winsock übertragen kann?

Danke
Sohail

Kommentar von ByteBuster am 18.10.2002 um 11:53

Hi @ all, bei mir geht folgendes nicht:
Sub oder function nicht definiert dann ist Winsock(0)... markiert als wenn er den index nicht erkennen würde, woran liegt das?

Kommentar von FREEZER am 12.08.2002 um 23:56

Hy Leutz.
Ich programmiere nicht lange VB, daher habe ich ein Problem mit diesem Programm. Bei mir funztes einfach nicht.
Könntet ih mir das Projekt mal posten?
Dann könnte ich kontrollieren was ich falsch gemacht habe......
Danke schon im voraus auch wenn es nicht möglich wäre...

Kommentar von Maxi am 09.08.2002 um 18:12

Hey Fenir!
Du hast doch da am 29.06.2002 ein Kommentar abgegeben.
Da wollt ich dich genauer fragen, wie du das ohne mehreren Ports hinkriegst?
Da bei mir, wenn ich das zweite mal einen Client anpinge, ich die Meldung bekomme: "Invalid operation at current state"
Hier zeigt er dann auf die Stelle:
WinSock(0).LocalPort = txtPort.Text
Könntest du mir also ein Beispiel geben, wie du es gemacht hast (eventuell mit Code-Beispiel) ?
Im Voraus vielen Dank für deine Mühe!
Maxi

Kommentar von rayman am 31.07.2002 um 00:18

Hey Stephan, das ist theoretisch schon möglich, aber ich halte das für ein wenig kompliziert. Es wäre einfacher, du benutzt den Verpackungs- und Weitergabeassitenten um ein Setup zu erstellen und baust dort die mswinsck.ocx mit rein. das funktioniert dann meines erachtens auch zuferlässiger, weil das proggi gar nicht erst auf die idee kommen kann weger der fehlenden winsock abzustürzen.

Kommentar von Stephan Fischer am 27.07.2002 um 23:28

Naja ich progge gerade ain ein Server und wollte Fragen ob es Möglich ist die mswinsck.ocx als Rescoure in das Programm einzubinden, die dann bei "Nicht vorhanden" sofort in Windows/System Ordner reinkopiert wird?
thx
MfG Stephan

Kommentar von Anunnaki am 09.07.2002 um 18:04

Hi Leute!
Hab da auch n'Problemchen. Immer wenn sich jemand ausloggt, bleibt er beim Server als aktiver Client registriert. Geht also jemand 10 mal raus und wieder rein stehen da 10 Clients. Wie kann ich das aktualisieren? Danke schon mal im Vorraus.
Ein Unwissender

Kommentar von Fenir am 29.06.2002 um 13:26

Was laberst du fürn Müll Jan?
Der Server listened zB auf Port 3000. Dann kommt ne Verbindung vom Clienten rein und man lädt ne neue Winsock-Instanz und lässt die neue Instanz die Verbindung akzeptieren. Wenn die Verbindung einmal angenommen wurde, ist der Port wieder frei für weitere Verbindung. Die Clienten kann man anschliessend über die einzelnen WinSock-Instanzen ansprechen.
Man braucht also nicht Port 3000...3001...usw.
Einzig und allein ein Array wäre nicht schlecht, in welchem protokolliert wird, welche Winsock-Instanzen Verbindungen haben. Darüber kann man dann eine Schleife laufen lassen die über alle WSockInstanzen mit Verbindung ein SendData macht.

Kommentar von Jan am 27.06.2002 um 13:50

Der Server kann mit einem Port nicht Funktionieren!!!!
Ihr müsstet einen festen Start Port festlegen z.B. 3000 über den sich der Client beim Server einloggt.
Wenn der Server an diesem Port ne Massage bekommt dann schaut er in nem Vector (dynamisches Array) nach welches der nächste freie Port ist (kann ja nummerisch sortiert sein 3001 bis 3...)
diesen Wert z.B. beim ersten Clienten 3001
schickt ihr über den Port 3000 an den Client.
Der Server läd nen neuen Winsock und stellt ihn mit dem Port 3001 ( Ja gerade selbst von ihm gesendet) auf Listen.
Jetzt hat der Client über den Port 3000 ne Meldung bekommen und speichert sie zwischen
dann schließt er den Winsocket und baut ne neue Verbindung über den Port 3001 auf.
Der Port ist nur für ihn ( da der nächste Client ja 3002 bekommen würde.
Ps. Es kann ja sein das sich zwei Clienten fast gleichzeitig über den Port 3000 ihre Log Daten holen wollen also müsst ihr ne Schleife einbauen(beim Client) die dieses in bestimmten Zeitintervallen wiederholt z.B. alle 2 sec Dazu ist die Api sleep ganz gut (verbraucht kein CPU)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliSeconds As Long)
schlafe für 2 sec = Sleep (2000)
(Tipp zu Timer auf AktivVB)
nochwas zum Vector
Ihr müsst den vektor regelmäßig warten d.h. Wenn sich jemand ausloggt den Eintrag(Port XXXX) löschen und das Array neu sortieren.
(Tipp zu Datenstrukturen auf AktivVB [Qucksort nur cpoy and paste)
Beim rausgeben der Ports sollte man immer den nächsten freien Port verteilen
es kann ja sein das port 3001 und dann erst 3004 vergeben ist, also sollte trotz dem Port 3002 vergeben werden
Gruß Jan

Kommentar von vb star am 01.05.2002 um 20:24

tjo server sollte man schon öffnen

Kommentar von dieBetzie am 24.11.2001 um 01:24

Der Chat kann gar nicht richtig funktionieren, da diw Winsock Control gar nicht auf einem Port listened (winsock1.listen). Ich hab woanders einen Funktionierenden Chat gefunden.

Kommentar von Steffen am 22.11.2001 um 12:33

Hallo,
auch bekomme die Fehlermeldung "Verbindung absichtlich verweigert" .
Gibt es wo möglich Probleme mit der mswinsck.ocx aus dem ServicePack 5 für VB ??
Thx CU

Kommentar von Ralf Hilden am 15.11.2001 um 12:03

Hallo,
ich doktere schon seit einigen Tagen an diesem Problem herum.
Ich bekomme bei dem Beispiel ebenfalls die Fehlermeldung "Verbindung absichtlich verweigert" Daraufhin habe ich das Beispiel von der VB 6 Hilfe ausprobiert und bekomme bei der Eingabe von Text folgende Fehlermeldung "Falsches Protokoll,...." TCP/IP ist aber auf beiden Rechnern installiert. Wer kann mir helfe, ich bin verzweifelt !!

Kommentar von Gnog am 11.10.2001 um 14:10

Danke!

Kommentar von Martin Straube am 05.10.2001 um 19:56

Hi Gnog ...
Probier im KeyPress-Event der Textbox folgendes ...
in dem If-Block von If KeyAscii = 13 And Connected Then
noch folgendes mit rein
KeyAscii = 0
dann ist das Geräusch wech ;)

Kommentar von Gnog am 29.09.2001 um 14:43

Hallo!
Danke erstmal für den "Tip", funktioniert echt super! hab jedoch noch ne frage: Bei mir gibt es immer so ein nerviges "ping" wenn ich die Enter-taste drücke, kann man das abstellen?
Danke schonmal fürs lesen
Gnog

Kommentar von Hilfesuchender am 02.09.2001 um 18:45

Sorry , habe mittlerweile ne neue mail adresse!
erz2001@web.de

Kommentar von Hilfesuchender am 02.09.2001 um 12:24

Also: " ... mehr als 2... Hierzu müßte dann die Winsock des Servers als Array ausgelegt werden." was genau soll gemacht werden?
Wäre nett wenn sich einer melden würde, thx

Kommentar von Tom Feld am 04.07.2001 um 10:52

hi
Es kommt immer dieselbe Fehlermeldung:
Verbindung absichtlich
unterbrochen,
-es kommt kein chatbetrieb zustande.

Kommentar von Goetz Reinecke am 15.06.2001 um 23:20

Tach Dummbazz, klappt über jedes TCP-taugliche Netzwerk, also auch Internet. Als Server brauchst Due keine IP, als Client die IP mit der der Server im Netz identifiziert wird. Du findest hier 3 Tips um solche IPs zu ermitteln.
Grüße
Götz

Kommentar von Dummbazz am 15.06.2001 um 19:37

Hallihallo!
Geht das auch über Internet? Was brauche ich da für eine IP?
Cu!