TCP Sendeproblem (Server sendet bei jeder 2. Anfrage)

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    TCP Sendeproblem (Server sendet bei jeder 2. Anfrage)

    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:

    Quellcode

    1. Imports System.Net.SocketsImports System.IO
    2.  
    3.  
    4. Public Class Form1
    5.  
    6. Dim stream As NetworkStream
    7. Dim streamw As StreamWriter
    8. Dim streamr As StreamReader
    9. Dim Client As New TcpClient
    10. Dim IP As String = "xx.xxx.xxx.xxx" 'IP und Port wurden herausgenommenDim Port As Integer = xxxxx
    11. Dim zs As String
    12.  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    13. getPlayerList()
    14.  
    15. End Sub
    16.  
    17.  
    18.  Sub client_send(ByVal text As String)
    19. streamw.WriteLine(text)
    20. streamw.Flush()
    21. End Sub
    22.  
    23.  
    24. Function client_recieve() As String
    25. client_recieve = streamr.ReadLine
    26. End Function
    27.  
    28.  
    29.  Private Sub login()
    30. client_send("usn " & TextBox1.Text) 'Username senden
    31. zs = client_recieve()
    32. If zs = "loggedin" Then
    33. Button2.Hide()
    34. TextBox1.Hide()
    35. End If
    36. End SubPrivate Sub getPlayerList()
    37.  
    38. client_send("gpl") ' Aufforderung senden, um Spielerliste zu bekommen
    39. RichTextBox1.Text = client_recieve()
    40.  
    41. End Sub
    42.  
    43.  
    44.  
    45. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   'Login Button
    46. If TextBox1.Text <> "" Then
    47. login()
    48. End If
    49.  
    50. End SubPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    51. Client.Connect(IP, Port) 'Client verbindet
    52. If Client.Connected Then
    53. stream = Client.GetStream ' Stream >Client
    54. streamw = New StreamWriter(stream) ' Sender wird deklariert
    55. streamr = New StreamReader(stream) ' Empfänger wird deklariert
    56. getPlayerList()
    57. ElseMsgBox("Verbidnung konnte nicht mit " & IP & " aufgebaut werden!")
    58. End IfEnd Sub
    59. End Class


    und Der Servercode:

    Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IOImports System.Net
    3.  
    4.  
    5. Public Class Form1
    6.  
    7. Dim stream As NetworkStream
    8. Dim streamw As StreamWriter
    9. Dim streamr As StreamReader
    10. Dim Server As TcpListener
    11. Dim client As New TcpClientDim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, xxxx) 'Port wurde von mir wieder entfernt
    12. Dim mainthread As Threading.Thread
    13. '______________
    14.  
    15.  
    16.  
    17.  
    18.  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadmainthread = New Threading.Thread(AddressOf mainserver)
    19. mainthread.Start()
    20. End Sub
    21.  
    22.  
    23.  Sub mainserver()
    24. TryServer = New TcpListener(ipendpoint)
    25. Server.Start()
    26. client = Server.AcceptTcpClient
    27. stream = client.GetStreamstreamr = New StreamReader(stream)
    28. streamw = New StreamWriter(stream)
    29.  
    30. While True
    31. 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)
    32. Case "usn"
    33. RichTextBox1.Text = RichTextBox1.Text & Mid(streamr.ReadLine, 4) & vbCrLfstreamw.WriteLine("loggedin")
    34. streamw.Flush()
    35. Case "gpl"
    36.  
    37. streamw.WriteLine(RichTextBox1.Text)
    38. streamw.Flush()
    39.  
    40. End Select
    41. End While
    42. Catch
    43. End Try
    44. End Sub
    45.  
    46.  
    47.  
    48.  Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
    49. Server.Stop()
    50. Try
    51. mainthread.Abort()
    52. Catch
    53. End Try
    54. End Sub
    55.  
    56.  
    57.  
    58.  End Class