Hab hier mal ein voll peinliches Problem. Hab mal versucht was kurz mitm Netzwerk zu testen, aber es will nicht richtig:
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN]
Type NetUser Field Stream Field IP$ Field Name$ Field Time End Type
Const GamePort = 4355
Global AnzSpieler = 0
Global NetHost = 0 Global NetHostIP$ = "127.0.0.1" Global NetHostConnection, NetConnection
If NetHost = 1 Then NetHostConnection = HostConnect() If NetHostConnection = 0 Then RuntimeError "Kann nicht hosten!" EndIf
NetConnection = ClientConnect(NetHostIP$,"TestuserC") If NetConnection = 0 Then RuntimeError "Kann keine Verbindung herstellen!"
DebugLog "OK!"
NetTime = MilliSecs() NetPingTime = MilliSecs()
Repeat
LoopTime = MilliSecs() msX = MouseX() msY = MouseY() msH = MouseHit(1)
If MilliSecs() - NetTime > 300 Then NetTime = MilliSecs()
If NETHost = 1 Then NeuerUser = AcceptTCPStream(NetHostConnection) If NeuerUser Then Neuling.NetUser = New NetUser Neuling\Stream = NeuerUser : DebugLog "Stream: "+Neuling\Stream Neuling\IP$ = DottedIP(TCPStreamIP(NeuerUser)) : DebugLog "IP: "+Neuling\IP$ Neuling\Time = MilliSecs() : DebugLog "Time: "+Neuling\Time EndIf
For Benutzer.NetUser = Each NetUser If ReadAvail(Benutzer\Stream) Then Nachricht$ = ReadLine(Benutzer\Stream) If Nachricht$ <> "" Then Select Upper(Mid(Nachricht$,1,5))
Case "\JOIN" Benutzer\Name$ = Mid(Nachricht$,7) : DebugLog Benutzer\Name$+" ("+Benutzer\Stream+")"
Case "\CHAT" For Benutzer2.NetUser = Each NetUser WriteLine Benutzer2\Stream, Nachricht$
Case "\EXIT" DelUser(Benutzer.NetUser,Mid(Nachricht$,7))
Case "\PING" Benutzer\Time = MilliSecs()
End Select End If EndIf If Benutzer\Time - LoopTime > 4000 Then DelUser(Benutzer.NetUser,"System: User antwortet nicht!") If Benutzer\Name$ = "" And Time - Benutzer\Time > 3000 Then Delete Benutzer.NetUser : DebugLog " Der User mit dem Stream "+Benutzer\Stream+" wurde gelöscht!" Next EndIf If ReadAvail(NetConnection) Then Nachricht$ = ReadLine(NetConnection) If Nachricht <> "" Then
Select Upper(Mid(Nachricht$,1,5))
Case "\CHAT" DebugLog Mid(Nachricht$,7)
End Select
EndIf EndIf EndIf If LoopTime - NetPingTime > 2500 Then NetPingTime = MilliSecs() WriteLine NetConnection, "\PING" EndIf
If KeyHit(57) Then WriteLine NetConnection, "\CHAT MäX: asdf" : DebugLog "Sende String..."
Delay 20 Flip Until KeyHit(1) End
Function HostConnect%() Result = CreateTCPServer(GamePort) If Result = 0 Then Result = CreateTCPServer(GamePort) Return Result End Function
Function ClientConnect%(IP$,Name$) Result = OpenTCPStream(IP$,GamePort) If Result = 0 Then Result = OpenTCPStream(NetHostIP$,GamePort) If Result Then WriteLine Result, "\JOIN "+Name$ Return Result End Function
Function DelUser(User.NetUser,ExitText$) For Benutzer.NetUser = Each NetUser WriteLine NetConnection, "\EXIT "+User\Name$+" "+ExitText$ Next Delete User.NetUser End Function
Function DebugLog(LogStr$) Print LogStr$ End Function
Boardsuche hat nix ausgespuckt
Der Code ansich funzt, nur ist er verzögert. Wenn das Programm als Server sich selbst joinen will, kommt keine Meldung. Die kommt erst, wenn eine weitere Instanz des Programms als Client joint. Dann kommen zwei meldungen.
Ich weiß auch, dass das nicht sonderlich ausgeklügelter Code ist
Ach ja, beim testen: ihr müsst für den Server einmal die Var "NetHost" auf 1 setzen und für den Clienten auf 0.
Ich hoffe, mein problem ist allgemein verständlich.
Danke schonmal, MäX
P.S. Ich bin schon bereit, mich zu verkriechen.
|