Hallo Rainer,
ja das hast du richtig erkannt. Ich versuche mich derzeit unter VB an einem Chat 
Es wird mal so werden, das die die den chat nutzen wollen den Clienten bekommen. Ich selbst habe auf meinen Rechner den Server laufen ( Also du musst einen Server schreiben und den Clienten).
Ich lege mir dann eine dynamische DNS zu, so das unter der eingabe http://meineaddi.de.tf ich immer erreichtbar bin.
Dann kann später mal der Client gestartet werden. dieser sendet dann über das winsock steuerelement daten an den server ueber einen port x.
Der Server empfängt die daten. Wenn der Zugang genehmigt wird, so wird ein Winsock Element nachgeladen und mit dem Clienten verbunden.
Auf dieser Art kannst du etliche Clienten mit dem server verbinden.
wenn nun ein client daten sendet,zeigt er die an und sendet sie an den server wertet, der diese aus, zeigt sie im server an und leitet sie dann an alle clienten weiter
(durchlauf aller winsock elemente ausser dem vom absender und dann aufruf der senddata methode )
Die clienten empfangen diese und zeigen sie dann an.
Das alles ist eigentlich rel. Simple.
Das schlimme ist nur wenn du priv. gespraeche einbauen willst oder dann halt noch mit farben etc arbeitest.
Sicher gehört da vieles mehr hinzu, aber das alles hier zu schreiben würde den rahmen sprengen.
aber nen kleines demo kannsch dir ma tippen 
Also mache einfach ne Form, setze darauf folgende Elemente
Winsock -> wsckchat mit dem index 0
3 Textboxen mit dem namen
txtname -> Nickname
txtNachricht -> Nachricht die gesendet werden soll
txtchat -> die anzuzeigenden nachrichten
5 Schaltflächen mit den Namen
cmdlisten -> Schickt das progg in den Server Modus
cmdconnect -> Progg läuft als client und verbindet sich mit dem server
cmdcancel -> Abbruch
cmdsend -> Daten werden gesendet
cmdbeenden -> prog wird beendet
Option Explicit
Private blnConnected As Boolean
Private strNick As String
Private blnServer As Boolean
Private blnSendCompleted As Boolean
Private Sub Senden(strData As String, Optional Index As Integer = 0)
blnSendCompleted = False
If wsckChat(Index).State = sckConnected Then
wsckChat(Index).SendData strData
Do Until blnSendCompleted
DoEvents
Loop
End If
End Sub
Private Sub AddMessage(strMessage As String, strSender As String)
txtChat.Text = txtChat.Text & \_
"(" & Trim(strSender) & ") " & \_
strMessage & vbCrLf
txtChat.SelStart = Len(txtChat.Text)
End Sub
Private Sub ForwardMsg(strData As String, intExcludeIndex As Integer)
Dim intCounter As Integer
If wsckChat.Count \> 1 Then
For intCounter = 1 To wsckChat.Count - 1
If intCounter intExcludeIndex Then
Senden strData, intCounter
End If
Next
End If
End Sub
Private Sub EnableButtons()
lblBez(0).Enabled = Not blnConnected
txtName.Enabled = Not blnConnected
cmdListen.Enabled = Not blnConnected
cmdConnect.Enabled = Not blnConnected
cmdCancel.Enabled = blnConnected
lblBez(1).Enabled = blnConnected
txtNachricht.Enabled = blnConnected
cmdSend.Enabled = blnConnected
txtChat.Enabled = blnConnected
txtChat.Text = ""
End Sub
Private Function GetNextFreeIndex() As Integer
Dim intCounter As Integer
For intCounter = 1 To wsckChat.Count - 1
If wsckChat(intCounter).State = sckClosed Then
GetNextFreeIndex = intCounter
Exit Function
End If
Next
GetNextFreeIndex = wsckChat.Count
Load wsckChat(GetNextFreeIndex)
End Function
Private Sub cmdBeenden\_Click()
Unload Me
Set frmMain = Nothing
End
End Sub
Private Sub cmdCancel\_Click()
Dim Counter As Integer
For Counter = 0 To wsckChat.Count - 1
If wsckChat(Counter).State sckClosed Then
wsckChat(Counter).Close
If Counter \>= 1 Then Unload wsckChat(Counter)
End If
Next
blnConnected = False
blnServer = False
EnableButtons
End Sub
Private Sub cmdConnect\_Click()
Dim strRemoteComputer As String
If Trim(txtName.Text) = "" Then txtName.Text = "no name"
strNick = Left(txtName & Space(50), 50)
blnConnected = True
blnServer = False
EnableButtons
strRemoteComputer = InputBox("Mit welchem Computer wollen Sie eine Verbindung aufnehmen?", "Connect", "127.0.0.1")
If Trim(strRemoteComputer) = "" Then
blnConnected = False
blnServer = False
EnableButtons
Exit Sub
End If
wsckChat(0).RemotePort = 12123
wsckChat(0).RemoteHost = strRemoteComputer
wsckChat(0).Connect
End Sub
Private Sub cmdListen\_Click()
If Trim(txtName.Text) = "" Then txtName.Text = "no name"
strNick = Left(txtName & Space(50), 50)
blnConnected = True
blnServer = True
EnableButtons
wsckChat(0).LocalPort = 12123
wsckChat(0).Listen
End Sub
Private Sub cmdSend\_Click()
Dim strMessage As String
If Trim(txtNachricht.Text) "" Then
strMessage = "0" & strNick & \_
txtNachricht.Text
If blnServer Then
ForwardMsg strMessage, 0
Else
Senden strMessage, 0
End If
AddMessage txtNachricht.Text, strNick
txtNachricht.Text = ""
End If
End Sub
Private Sub Form\_Load()
blnServer = False
blnSendCompleted = True
End Sub
Private Sub wsckChat\_Close(Index As Integer)
If blnServer Then
If Index = 0 Then
blnConnected = False
blnServer = False
EnableButtons
Else
AddMessage "Der User " & wsckChat(Index).Tag & " hat den Chat verlassen", "-system-"
ForwardMsg Left("-system-" & Space(50), 50) & \_
"Der User " & wsckChat(Index).Tag & " hat den Chat verlassen", Index
wsckChat(Index).Close
End If
Else
AddMessage "Die Verbindung wurde beendet", "-system-"
blnConnected = False
blnServer = False
EnableButtons
End If
End Sub
Private Sub wsckChat\_Connect(Index As Integer)
Senden "1" & strNick
End Sub
Private Sub wsckChat\_ConnectionRequest(Index As Integer, ByVal requestID As Long)
wsckChat(GetNextFreeIndex).Accept requestID
End Sub
Private Sub wsckChat\_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strData As String
Dim strNick As String
Dim strMessage As String
wsckChat(Index).GetData strData
If Left(strData, 1) = "0" Then
strNick = Trim(Mid(strData, 2, 50))
strMessage = Mid(strData, 52)
AddMessage strMessage, strNick
If blnServer Then ForwardMsg strData, Index
ElseIf Left(strData, 1) = "1" Then
strNick = Trim(Mid(strData, 2, 50))
If blnServer Then
wsckChat(Index).Tag = strNick
ForwardMsg Left("-system-" & Space(50), 50) & "1" & strNick, Index
End If
AddMessage "Der User " & strNick & " betritt den Chat.", "-system-"
End If
End Sub
Private Sub wsckChat\_SendComplete(Index As Integer)
blnSendCompleted = True
End Sub
so wie du nun siehst ist es eigentlich rel. simple 
MFG Alex