Hallo Community,
Ich programmiere derzeit ein Online strategie Spiel mit visual basic express 2008.
Ich habe mir eine Libary für den Server und den Clienten erstellt:
Nun habe ich den server erstellt:
Dann habe ich den code für den clienten geschrieben:
Natürlich habe ich bei Form2.shown client.start
so nun wenn ich das programm starte und mich einlogge, seh ich zwar im server das ich mich eingeloggt habe, aber nicht das ich die map daten anfordere, geschweige denn erhalte ich die mapdaten. Ich hoffe ihr habt einen rat für mich.
Gruß, UWAP
Ich programmiere derzeit ein Online strategie Spiel mit visual basic express 2008.
Ich habe mir eine Libary für den Server und den Clienten erstellt:
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Net
- Public Class NetWorker
- Public Class server
- Private serv As TcpListener
- Private client As New TcpClient
- Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000)
- Private list As New List(Of Connection)
- Public Event work(ByVal message As String, ByVal con As Connection)
- Public Structure Connection
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- Dim nick As String
- Dim privateInteraction As Boolean
- End Structure
- Public Sub SendToAllClients(ByVal s As String)
- For Each c As Connection In list
- Try
- If c.privateInteraction = False Then
- c.streamw.WriteLine(s)
- c.streamw.Flush()
- End If
- Catch
- End Try
- Next
- End Sub
- Public Sub SendToClient(ByVal s As String, ByVal nick As String)
- For Each c As Connection In list
- Try
- If c.nick = nick Then
- c.streamw.WriteLine(s)
- c.streamw.Flush()
- End If
- Catch
- End Try
- Next
- End Sub
- Public Sub start(ByVal Port As String, Optional ByVal ServerStartMessage As String = "Der Server wurde gestartet")
- ipendpoint = New IPEndPoint(IPAddress.Any, Port)
- Console.WriteLine(ServerStartMessage)
- serv = New TcpListener(ipendpoint)
- serv.Start()
- While True
- console.writeline(".")
- client = serv.AcceptTcpClient
- Dim c As New Connection
- c.stream = client.GetStream
- c.streamr = New StreamReader(c.stream)
- c.streamw = New StreamWriter(c.stream)
- c.nick = c.streamr.ReadLine
- list.Add(c)
- Console.WriteLine(c.nick & " has joined.")
- Dim t As New Threading.Thread(AddressOf ListenToConnection)
- t.Start(c)
- End While
- End Sub
- Private Sub ListenToConnection(ByVal con As Connection)
- Do
- Try
- Dim tmp As String = con.streamr.ReadLine
- RaiseEvent work(tmp, con)
- Catch : Console.WriteLine(con.nick & " has left.") : End Try
- Loop
- Console.WriteLine(con.nick & " has left.")
- End Sub
- End Class
- Public Class ClientWorker
- Private stream As NetworkStream
- Private streamw As StreamWriter
- Private streamr As StreamReader
- Private client As New TCPclient
- Private t As New Threading.Thread(AddressOf Listen)
- Public Event connectionLost()
- Public Event cantConnect()
- Public Event connected()
- Public Event work(ByVal read As String)
- Public Sub connect(ByVal ip As String, ByVal port As String, ByVal nick As String)
- Try
- client.Connect(ip, port)
- If client.Connected Then
- stream = client.GetStream
- streamw = New StreamWriter(stream)
- streamr = New StreamReader(stream)
- streamw.WriteLine(nick)
- streamw.Flush()
- t.Start()
- RaiseEvent connected()
- Else
- RaiseEvent connectionLost()
- End If
- Catch ex As Exception
- RaiseEvent cantConnect()
- End Try
- End Sub
- Private Sub Listen()
- While client.Connected
- Try
- RaiseEvent work(streamr.ReadLine)
- Catch
- RaiseEvent connectionLost()
- End Try
- End While
- RaiseEvent connectionLost()
- End Sub
- Public Sub stopClient()
- t.Suspend()
- End Sub
- Public Sub writeToServer(ByVal s As String)
- streamw.WriteLine(s)
- End Sub
- End Class
- End Class
Nun habe ich den server erstellt:
VB.NET-Quellcode
- WithEvents server As New LJLib.NetWorker.server
- Sub Main()
- server.start("25565")
- End Sub
- '[...]
- Private Sub ListenToConnection(ByVal tmp As String, ByVal con As LJLib.NetWorker.server.Connection) Handles server.work
- '[...]
- If tmp = "[Map]" Then
- con.privateInteraction = True
- Console.WriteLine(con.nick + " fordert die map daten")
- End If
- '[...]
- End Sub
Dann habe ich den code für den clienten geschrieben:
Natürlich habe ich bei Form2.shown client.start
so nun wenn ich das programm starte und mich einlogge, seh ich zwar im server das ich mich eingeloggt habe, aber nicht das ich die map daten anfordere, geschweige denn erhalte ich die mapdaten. Ich hoffe ihr habt einen rat für mich.
Gruß, UWAP