ich will ein Tool machen, welches zwei Server-Ports öffnet. Da will ich jetzt einfach alles was bei einem reinkommt, zum anderen raussenden (und umgekehrt).
Server <-> Mediator <-> Client
Hier mein bisheriger Code:
Code: Alles auswählen
; VNC Mediator
#NetworkBufferSize = 256
InitNetwork()
*NetworkBufferServer.l = AllocateMemory(#NetworkBufferSize)
*NetworkBufferViewer.l = AllocateMemory(#NetworkBufferSize)
BytesCountServer.l = 0
BytesCountViewer.l = 0
ListenerServer.l = CreateNetworkServer(#PB_Any, 5500)
If ListenerServer.l = 0
MessageRequester("VNC Mediator", "Can not open Port 5500 (server)!")
End
EndIf
ListenerViewer.l = CreateNetworkServer(#PB_Any, 5900)
If ListenerViewer.l = 0
MessageRequester("VNC Mediator", "Can not open Port 5900 (viewer)!")
End
EndIf
Debug "Server gestartet!"
Repeat
SEvent.l = NetworkServerEvent()
If SEvent.l
ClientID.l = EventClient()
ServerID.l = EventServer()
Select SEvent.l
Case #PB_NetworkEvent_Connect
; -------------------------------------------------------------------------------------------------
If ServerID.l = ListenerServer.l
ConnectedServer.l = ClientID.l
Debug "connected server"
If BytesCountViewer.l > 0
; schon Daten im Viewer-Puffer. Sende gleich zurück...
Debug "Sende Daten an server: " + Str(BytesCountViewer.l) + " bytes"
SendNetworkData(ConnectedServer.l, *NetworkBufferViewer, BytesCountViewer.l)
BytesCountViewer.l = 0
EndIf
EndIf
If ServerID.l = ListenerViewer.l
ConnectedViewer.l = ClientID.l
Debug "connected viewer"
If BytesCountServer.l > 0
; schon Daten im Server-Puffer. Sende gleich zurück...
Debug "Sende Daten an viewer: " + Str(BytesCountServer.l) + " bytes"
SendNetworkData(ConnectedViewer.l, *NetworkBufferServer, BytesCountServer.l)
BytesCountServer.l = 0
EndIf
EndIf
Case #PB_NetworkEvent_Data
; -------------------------------------------------------------------------------------------------
If ServerID.l = ListenerServer.l
; Daten vom Server
Repeat
BytesCountServer.l = ReceiveNetworkData(ClientID.l, *NetworkBufferServer, #NetworkBufferSize)
Debug "Empfange Daten von server: " + Str(BytesCountServer.l) + " bytes"
If BytesCountServer.l > 0
Content.s = PeekS(*NetworkBufferServer, BytesCountServer.l)
Debug Content.s
If BytesCountServer.l > 0 And ConnectedViewer.l <> 0
Debug "Sofort sende Daten an viewer: " + Str(BytesCountServer.l) + " bytes"
SentBytes.l = SendNetworkData(ConnectedViewer.l, *NetworkBufferServer, BytesCountServer.l)
If SentBytes.l < BytesCountServer.l
; re-send the rest after 20 milliseconds
Debug "Re-Send 1..."
Delay(10)
SentBytes.l = SendNetworkData(ConnectedViewer.l, *NetworkBufferServer + SentBytes.l, BytesCountServer.l - SentBytes.l)
EndIf
EndIf
If BytesCountServer.l = -1
Debug "-- socket error on server"
BytesCountServer.l = 0
EndIf
EndIf
Until BytesCountServer.l < #NetworkBufferSize
EndIf
If ServerID.l = ListenerViewer.l
; Daten vom Viewer
Repeat
BytesCountViewer.l = ReceiveNetworkData(ClientID.l, *NetworkBufferViewer, #NetworkBufferSize)
Debug "Empfange Daten von viewer: " + Str(BytesCountViewer.l) + " bytes"
If BytesCountViewer.l > 0
Content.s = PeekS(*NetworkBufferViewer, BytesCountViewer.l)
Debug Content.s
If BytesCountViewer.l > 0 And ConnectedServer.l <> 0
Debug "Sofort sende Daten an server: " + Str(BytesCountViewer.l) + " bytes"
SentBytes.l = SendNetworkData(ConnectedServer.l, *NetworkBufferViewer, BytesCountViewer.l)
If SentBytes.l < BytesCountViewer.l
; re-send the rest after 20 milliseconds
Debug "Re-Send 2..."
Delay(10)
SentBytes.l = SendNetworkData(ConnectedViewer.l, *NetworkBufferViewer + SentBytes.l, BytesCountViewer.l - SentBytes.l)
EndIf
EndIf
If BytesCountViewer.l = -1
Debug "-- socket error on viewer"
BytesCountViewer.l = 0
EndIf
EndIf
Until BytesCountViewer.l < #NetworkBufferSize
EndIf
Case #PB_NetworkEvent_Disconnect
; -------------------------------------------------------------------------------------------------
If ServerID.l = ListenerServer.l
ConnectedServer.l = 0
Debug "disconnected server"
EndIf
If ServerID.l = ListenerViewer.l
ConnectedViewer.l = 0
Debug "disconnected viewer"
EndIf
EndSelect
EndIf
Delay(1)
Until Quit.l = 1
CloseNetworkServer(ListenerViewer.l)
CloseNetworkServer(ListenerServer.l)
EndHat jemand eine Ahnung woran das liegt?
[UPDATE] Sourcecode durch Refactoring besser lesbar gemacht.[/UPDATE]
Kukulkan