Mira si entiendo bien lo que queres hacer, la forma que se me ocurre es:
**El Programa van a ser clientes y servidores a la ves ya que el programa va a tener 2 winsock, uno para mensajes entrantes y uno para mensajes salientes, estos winsock van a usar distinto puerto.
**Cada usuario va a ser identificado por su ip, despues si queres hacete un sistema de nicks que no es dificil.
**El winsock para los mensajes entrantes siempre esta a en Listen.
entoces cuando vos mandas un mensaje lo que pasaria seria esto al apretar el boton de enviar...
Codigo Para enviar
Dim mensaje As String
Dim ips(20) As String ' En este vector vas a guardar las ips de las personas con las que estas hablando
Private Sub Command1_Click()
mensaje = Trim(text1.Text)
'Al enviar el mensaje seteas el WS_eviar para que se likee al ws_recivir de el receptor
ws_enviar.RemoteHost = ips(0)
ws_enviar.Connect
ws_enviar.SendData (mesaje)
ws_enviar.Close ' Lo vuelvo a cerrar y ya esta listo para enviar mensajes a quien vos quieras...
End Sub
Y listo solo te queda hacer que cuando te llegue el connection request , conectes recibas el paquete (mensaje), cierres el ws_recibir y lo pongas en listen de vuelta, Calculo que con eso funcionaria.
EDIT: el codigo no lo probe lo escribi asi nomas para que entiendas mi idea, solo te faltaria agregarle al paquete de mensaje un identificador para indentificar de quien es dicho mensaje y ponerlo en distintos text...
Saludos y espero que te sirva =)