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 |