Chat Erweitern

Dark Ranger

Erfahrenes Mitglied
1
Der Code vom Client:
Code:
Option Explicit

Private Sub cmdBeenden_Click()
Unload frmLogin
Unload frmEinstellungen
Unload Me
End Sub

Private Sub cmdSend_Click()
Winsock.SendData frmLogin.txtName.Text & ": " & txtEingabe.Text & vbCrLf
End Sub

Private Sub Form_Load()
Winsock.RemoteHost = frmEinstellungen.txtIP.Text
Winsock.RemotePort = frmEinstellungen.txtPort.Text
Winsock.Connect
End Sub


Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
Winsock.GetData sData
txtChat.Text = txtChat.Text & sData
txtChat.SelLength = Len(txtChat.Text)
End Sub

Der Code vom Server:
Code:
Option Explicit
Dim intmax As Integer

Private Sub cmdBeenden_Click()
Unload frmLogin
Unload frmEinstellungen
Unload Me
End Sub

Private Sub Form_Load()
intmax = 0
Winsock(0).LocalPort = frmEinstellungen.txtPort.Text
Winsock(0).Listen
End Sub

Private Sub Winsock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  If Index = 0 Then
    intmax = intmax + 1
    Load Winsock(intmax)
    Winsock(intmax).LocalPort = frmEinstellungen.txtPort.Text
    Winsock(intmax).Accept requestID
    Winsock(intmax).SendData "Verbunden" & " " & intmax & vbCrLf
  End If
End Sub

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

  Dim data As String
  Dim i As Integer

    Winsock(Index).GetData data

  For i = 0 To intmax
    Winsock(i).SendData data
  Next i

  txtChat.Text = txtChat.Text & data
  txtChat.SelLength = Len(txtChat.Text)
End Sub

_____________________________________________________________________
2
Wrong protocol or connection state for the requested transaction or request

Was bedeutet der Fehler? Was ist flasch am Code? Es liegt bestimmt am Server oder?

Code:
Winsock(i).Senddata data
Da sagt der Computer liegt das Problem!

_____________________________________________________________________
3
Inzwischen bin ich ein wenig weiter:
Erklärungen:
Server
frmLogin:
-Man muss Name und Passwort eingeben, es muss beides stimmen, damit man weiterkommt (funktioniert)

frmEinstellungen:
-Hier muss man den Port angegeben, denn man verwenden möchte (funktioniert)

frmChat:
-In einer Multiline Textbox werden alle Texte angezeigt, die die User schreiben (funktioniert)
-Wenn ein User etwas schreibt, dann leitet der Server es an alle anderen User weiter (funktioniert)
-Alle User werden in einer Textbox angezeigt (Wie soll ich anfangen? Wie mache ich das?

Client
frmLogin
-Man muss einen Namen eingeben, der zum chatten verwendet wird (funktioniert)

frmEinstellungen
-Man muss port und IP des Servers eingeben (funktioniert)

frmChat
-In einer Multilinetextbox wird der Chat durchgeführt (Wenn man Text an den Server sendet, dann bekommt ein bestimmter Client alle Texte doppelt)
-Man kann in eine Texbox einen Text eingeben und senden (funktioniert)
- User sollen in einer Textbox angezeigt werden (funktioniert nicht, siehe Server)
 
4
Dark Ranger hat gesagt.:
Was bedeutet der Fehler? Was ist flasch am Code? Es liegt bestimmt am Server oder?

Code:
Winsock(i).Senddata data
Da sagt der Computer liegt das Problem!

Das Problem besteht weiterhin!

Erklärungen:
Server
frmLogin:
-Man muss Name und Passwort eingeben, es muss beides stimmen, damit man weiterkommt (funktioniert)

frmEinstellungen:
-Hier muss man den Port angegeben, denn man verwenden möchte (funktioniert)

frmChat:
-In einer Multiline Textbox werden alle Texte angezeigt, die die User schreiben (funktioniert)
-Wenn ein User etwas schreibt, dann leitet der Server es an alle anderen User weiter (Probleme!)
-Alle User werden in einer Textbox angezeigt (Wie soll ich anfangen? Wie mache ich das?

Client
frmLogin
-Man muss einen Namen eingeben, der zum chatten verwendet wird (funktioniert)

frmEinstellungen
-Man muss port und IP des Servers eingeben (funktioniert)

frmChat
-In einer Multilinetextbox wird der Chat durchgeführt (funktioniert teilweise, meistens wird der eigene Text an den Server gesendet und kommt in 4facher Ausführung zurück, andere Clients bekommen gar nix)
-Man kann in eine Texbox einen Text eingeben und senden (funktioniert)
- User sollen in einer Textbox angezeigt werden (funktioniert nicht, siehe Server)

_____________________________________________________________________
5
Bin ja schon alleine sehr weit gekommen :-)

Aber wie schaffe ich es, dass die User des Chats in einer Userliste angezeigt werden?

Und wenn ein User den Chat verlässt, dann kommt ein Fehler, wie kann ich den ausbauen, was muss ich bei Winsock_Close eingeben?
 
Re: Nicht erschrecken! *g*

Wenn ein User den Chat verlässt, dann kommt ein Fehler, wenn wieder jemand was im Chat schreibt, oder?
Das liegt daran, dass der Server versucht auch an den Client was zu schicken, der bereits offline ist.
Du könntest also beispielsweise vor dem Senden von Daten prüfen, ob noch eine Verbindung zu dem Client besteht:
Code:
For i = 0 To intmax
    If Winsock(i).State = sckConnected then Winsock(i).SendData data
Next i
 
Re: Nicht erschrecken! *g*

Ja das funktioniert! Danke!

Hast du vielleicht auch ne Idee, wie ich User hinzufügen kann?

(Ich habe Server und Client mal als Anhang hochgeladen!
 

Anhänge

Re: Nicht erschrecken! *g*

Ich habe jetzt mal versucht, es mir Useranzeige zu machen, aber leider geht es nicht so ganz, was habe ich falsch gemacht?

Habe ein Tutorial über einen Chat gefunden, wo soetwas gemacht wird:
Tutorial - hier klicken

Aber irgendwie funktioniert das ganze nicht, der Chat Text wird jetzt da angezeigt, wo eigentlich die User angezeigt werden sollen!

Anstatt den ganzen Code hochzuladen, habe ich mal eine gezippte Version hochgeladen, ich hoffe sie funktioniert!
 

Anhänge

6
Ich habe mir das Tutorial angeschaut und da stand, dass die ersten 50 Zeichen für den Nickname freigehalten sind und dann könnte man doch diese 50 Zeilen nehmen und Server + Clients sagen, dass sie es in den txtUser.Text schreiben sollen!

Oder gibt es noch ne bessere möglichkeit?
Zum Beispiel auch so, dass am Anfang dort steht "Client1" hat sich gerade angemeldet! Oder soetwas?
Aber der User sollte natürlich trotzdem in der Userliste sein!

_____________________________________________________________________
7
Ich komme einfach nicht weiter!

_____________________________________________________________________
8
Gibt es keine Möglichkeit den Usernamen einmal zu übermitteln, wenn man sich angemeldet hat?
Und wenn man geht, dass man dann noch irgendeinen Befehl sendet, sodass der Server den User ausser Userliste nimmt?

_____________________________________________________________________
9
Ich hätte dazu auch mal eine Frage!
Ich habe in meinem Chat eine Userliste, dass Problem ist nun, dass das Programm nur User in die Userliste schreiben soll, die noch nicht vorhanden sind!

Wie kann ich das realisieren?
 
Re: Nicht erschrecken! *g*

Ja kenne ich! Ich weiß auch nicht warum ich früher den Titel gewählt habe, eigentlich sollte es andersrum sein, weil der Mitteilungstitel ist ja irgendwie "Chat" oder so und so sollte eigentlich der Tite lauten, aber irgendwie habe ich es verplant!

Aber du weißt auch keine Antwort auf meine Frage oder?
 
Re: Nicht erschrecken! *g*

Hi,

die Clients senden doch Daten an den Server. Warum nicht immer die erste Nachricht als Eintrag in einen Array verwenden, enthält die Usernamen, und diesen dann in dem Fenster anzeigen. Und wenn einer den Chat verläßt schickt er nocheinmal eine Nachricht, beginnt vieleicht mit einem bestimmten Zeichen an dem der Server erkennt, dass gerade einer geht, und dann den Array aktualisieren.
Nur mal eine grundsätzliche Idee. Keine Ahnung, ob sich das auch so umsetzen läßt.

ulki
 
10
Ja ich habe es so, dass die ersten 50 Zeichen den Usernamen bilden und dass in eine Userliste zu schreiben ist kein Problem! ^^

_____________________________________________________________________
11
Irgendwie wird der Username aber nicht übertragen!

Ich habe für den Usernamen eine zweite Winsockverbindung aufgebaut und darüber wird dann der Username verschickt, aber irgendwie funktioniert das nicht! :(
 

Neue Beiträge

Zurück