Guten Tag liebe Community,
Ich habe ein Problem: Ich schreibe gerade ein Grundlagenprogramm für Games und Community: Es soll nun bei anfrage auf den Server die Userliste zurückgeben und man soll sich natürlich einloggen können.
Nun mein Problem: Das Programm (Server-seite) trägt mir bei jedem 2. Loginversuch erst den Namen ein und der Client registriert erst nach 4 oder 5 Logins, dass es vom Server eine Rückmeldung bekommen hat. Ich habe nun 2 Stunden des grübelns und 0.5 L Cafe hinter mir, nun wollte ich euch fragen, ob evt jmd von euch die Lösung findet.
Ich wäre sehr froh über Hilfe und oder eine Lösung. Hier die Codes:
Client:
und Der Servercode:
Ich habe ein Problem: Ich schreibe gerade ein Grundlagenprogramm für Games und Community: Es soll nun bei anfrage auf den Server die Userliste zurückgeben und man soll sich natürlich einloggen können.
Nun mein Problem: Das Programm (Server-seite) trägt mir bei jedem 2. Loginversuch erst den Namen ein und der Client registriert erst nach 4 oder 5 Logins, dass es vom Server eine Rückmeldung bekommen hat. Ich habe nun 2 Stunden des grübelns und 0.5 L Cafe hinter mir, nun wollte ich euch fragen, ob evt jmd von euch die Lösung findet.
Ich wäre sehr froh über Hilfe und oder eine Lösung. Hier die Codes:
Client:
Quellcode
- Imports System.Net.SocketsImports System.IO
- Public Class Form1
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- Dim Client As New TcpClient
- Dim IP As String = "xx.xxx.xxx.xxx" 'IP und Port wurden herausgenommenDim Port As Integer = xxxxx
- Dim zs As String
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- getPlayerList()
- End Sub
- Sub client_send(ByVal text As String)
- streamw.WriteLine(text)
- streamw.Flush()
- End Sub
- Function client_recieve() As String
- client_recieve = streamr.ReadLine
- End Function
- Private Sub login()
- client_send("usn " & TextBox1.Text) 'Username senden
- zs = client_recieve()
- If zs = "loggedin" Then
- Button2.Hide()
- TextBox1.Hide()
- End If
- End SubPrivate Sub getPlayerList()
- client_send("gpl") ' Aufforderung senden, um Spielerliste zu bekommen
- RichTextBox1.Text = client_recieve()
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'Login Button
- If TextBox1.Text <> "" Then
- login()
- End If
- End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Client.Connect(IP, Port) 'Client verbindet
- If Client.Connected Then
- stream = Client.GetStream ' Stream >Client
- streamw = New StreamWriter(stream) ' Sender wird deklariert
- streamr = New StreamReader(stream) ' Empfänger wird deklariert
- getPlayerList()
- ElseMsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
- End IfEnd Sub
- End Class
und Der Servercode:
Quellcode
- Imports System.Net.Sockets
- Imports System.IOImports System.Net
- Public Class Form1
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- Dim Server As TcpListener
- Dim client As New TcpClientDim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, xxxx) 'Port wurde von mir wieder entfernt
- Dim mainthread As Threading.Thread
- '______________
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadmainthread = New Threading.Thread(AddressOf mainserver)
- mainthread.Start()
- End Sub
- Sub mainserver()
- TryServer = New TcpListener(ipendpoint)
- Server.Start()
- client = Server.AcceptTcpClient
- stream = client.GetStreamstreamr = New StreamReader(stream)
- streamw = New StreamWriter(stream)
- While True
- Label1.Text = Label1.Text & "1" 'Hier überprüfe ich die Rückgabe, und wie gesagt, es fügt immer erst nach 2 Buttonclicks die 1 hinzu.Select Case Mid(streamr.ReadLine, 1, 3)
- Case "usn"
- RichTextBox1.Text = RichTextBox1.Text & Mid(streamr.ReadLine, 4) & vbCrLfstreamw.WriteLine("loggedin")
- streamw.Flush()
- Case "gpl"
- streamw.WriteLine(RichTextBox1.Text)
- streamw.Flush()
- End Select
- End While
- Catch
- End Try
- End Sub
- Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
- Server.Stop()
- Try
- mainthread.Abort()
- Catch
- End Try
- End Sub
- End Class