vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Streamreader.Peek macht Probleme 
Autor: Cryol94
Datum: 20.12.12 11:43

ICh schreibe gerade eine kleines Spiel ziwschen 2 PCs im LAN und benutze dafür TCP und Stream befehle.
Im ersten Fenster wird der Name des Spielers und die IP Adresse des Gegners abgefragt. Hier mal der Code für die erste Form.... ICh weiß man kann vieles vereinfachen usw.

Public Class Form2
    Dim Listender As New TcpListener(55555)
    Dim client As New TcpClient
    Dim c1, c2, c3, c4, c5, c6 As Boolean
    Dim stringc1, stringc2, stringc3, stringc4, stringc5, stringc6, stringget _
      As String
    Dim Labels(42) As Label
    Dim Größe, x, y As Integer
    Dim Verbindung As Boolean = False
    Dim strings(2) As String
 
 
 
    Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
 
 
    End Sub
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        Listender.Start()
 
 
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Timer1.Tick
        If Listender.Pending = True Then
 
 
            client = Listender.AcceptTcpClient()
            Dim reader As New StreamReader(client.GetStream)
 
 
            stringget = ""
 
            While reader.Peek > -1
 
                stringget += Convert.ToChar(reader.Read()).ToString
                strings = stringget.Split(vbNewLine)
 
 
            End While
 
            If strings(0) = "Verbindung" Then
 
                Verbindung = True
                Gegner = strings(1)
 
            End If
 
         'gekürzt
 
 
 
        End If
    End Sub
 
 
End Class
Hierbei funktioniert der Reader.peek ohne Probleme...
Jetzt kommen wir zur 2ten Form.
Ich kürz etwas da dies mehr als 1000 Zeilen sind:

Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
 
 
Public Class Form1
    Dim Listender As New TcpListener(44444)
    Dim client As New TcpClient
    Dim c1, c2, c3, c4, c5, c6 As Boolean
    Dim stringc1, stringc2, stringc3, stringc4, stringc5, stringc6, stringget _
      As String
    Dim Labels(42) As Label
    Dim Größe, x, y, Runde As Integer
    Dim ButtonTXT As String
    Dim Bla As String
 
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles MyBase.Load
        Dim Listthread2 As New Thread(New ThreadStart(AddressOf _
        Listender.Start))
 
'Button Einstellungen
        Listender.Start()
 
 
 
' Hier etwas Gekürzt___________________________
        Labels_Legen()
        If Spieler = 1 Then
            Label43.Text = "Spieler 1:" & vbNewLine & Selbst
            Label44.Text = "Spieler 2:" & vbNewLine & Gegner
        End If
        If Spieler = 2 Then
            Label43.Text = "Spieler 1:" & vbNewLine & Gegner
            Label44.Text = "Spieler 2:" & vbNewLine & Selbst
        End If
        Label43.BackColor = Color.Green
        Runde = 1
        client = New TcpClient(TextBox1.Text, 44444)
        Runde_Überprüfen()
    End Sub
 
 
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Timer1.Tick
        If Listender.Pending = True Then
            stringget = ""
            client = Listender.AcceptTcpClient()
            client = New TcpClient(TextBox1.Text, 44444)
            Dim reader As New StreamReader(client.GetStream)
            Do While reader.Peek > -1
                stringget += Convert.ToChar(reader.Read()).ToString
 
                'Hier sind ganz viele stingget befehle
            Loop
            TextBox2.Text += "Partner:" & vbNewLine & stringget & vbNewLine
        End If
    End Sub
Das Problem bei der 2Ten Form ist einfach das das Programm sobald es bei
Do While reader.peek > 1
Einfach ohne Fehlermeldung einfriert bzw. Abstürzt.
Das passiert natürlich auf beiden Clienten und nicht nur bei einem
Es ist sogar egal ob ich DO While oder nur While schreibe. Das erbenis bleibt das selbe.


Weiß einer was ich ändern könnte bzw. woran der Fehler liegt?


Würde mich über Antworten freuen.
Bei Fragen einfach Fragen XD
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Streamreader.Peek macht Probleme 
Autor: ModeratorFZelle (Moderator)
Datum: 20.12.12 12:45

Das Problem ist, das das ganze die falsche Herangehensweise ist.

Reader.Peek ist für Dateien gedacht, bei Netzwerk Streams wartet der auf das nächste Zeichen und kehrt erst dann zurück.
Auch solltest du komplett umdenken.
Dein einfrieren passiert weil du nicht ereignisorientiert denkst und arbeitest.

Eine sehr einfache .NET Bibliothek um so etwas zu realisieren wäre z.b. TcpComponents.net
Die ist zwar in C# geschrieben, aber du kannst die ganz einfach einbinden und dann als Komponente benutzen.
Da hat der TcpClient ein Event OnDataAvailable, fertig.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel