QB64 Phoenix Edition
a little TCP/IP network in LocalHost - Printable Version

+- QB64 Phoenix Edition (https://qb64phoenix.com/forum)
+-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1)
+--- Forum: Code and Stuff (https://qb64phoenix.com/forum/forumdisplay.php?fid=3)
+---- Forum: Programs (https://qb64phoenix.com/forum/forumdisplay.php?fid=7)
+---- Thread: a little TCP/IP network in LocalHost (/showthread.php?tid=3101)



a little TCP/IP network in LocalHost - TempodiBasic - 10-06-2024

Hi QB64 friends...
here it follows a my new TCP/IP experience creating a little network with 3 clients and 1 host server.

The same pocedure is for a network behind the home LAN.... you must use Host on a server PC connected to outside via TCP/IP and a pc for each Client program connected via TCP/IP to outside line.... the only difference is the URL used for creating connections!


Here the codes for Host and LClient1, Lclient2 and Lclient3 in the same PC

Host
Code: (Select All)

Rem Project to simulate a server with multiple clients TCP/IP

Rem the first program is the server side of the network

Screen _NewImage(800, 640, 32)
Cls , _RGBA32(250, 100, 200, 255)
_ScreenMove 10, 10
_PrintString (10, 200), "testing if SERVER is already ON"

Dim Server As Long
Server = _OpenClient("TCP/IP:7319:localhost")
If Server Then Msg$ = "Server Host already ON" Else Msg$ = "Server Host OFF, activating Server Host..."
_PrintString (10, 230), Msg$ + Space$(6)

If Server = 0 Then
    Server = _OpenHost("TCP/IP:7319 ")
    If Server = 0 Then Msg$ = "Failed to activate server Host. Host is OFF" Else Msg$ = " Activated Server Host. Host is ON"
    _PrintString (10, 300), Msg$
End If

Rem here Host runs Client apps

Shell _DontWait "LClient1.exe"
Shell _DontWait "LClient2.exe"
Shell _DontWait "LClient3.exe"

Rem here Host searches connections with clients and if activated it reads data

Dim Cli(1 To 3) As Long, n As Integer, Comd As String

Do
    n = n + 1
    If n = 4 Then n = 1
    If Cli(n) = 0 Then Cli(n) = _OpenConnection(Server) ' Is cli(n) connected?

    Comd = "" ' it deletes previous command read by client
    If Cli(n) <> 0 Then
        If Not EOF(Cli(n)) Then Get #Cli(n), , Comd ' has Cli(n) sent data?
    End If

    ' data executor
    Select Case Comd
        Case " ":
            _PrintString (10, 100), "Client" + Str$(n) + " quits" + Space$(6)
            Close
            ' it quits
        Case "c", "C":
            Cls , _RGBA32((Rnd * (255)) + 1, (Rnd * (255)) + 1, (Rnd * (255)) + 1, 255)
            _PrintString (10, 100), "Client" + Str$(n) + " changes color" + Space$(6)
            ' it changes color
        Case "s", "S":
            Play "cdc"
            _PrintString (10, 100), "Client" + Str$(n) + " makes sound" + Space$(6)
            ' it sounds some notes
    End Select
    _PrintString (10, 300), " Press space key to quit" + Space$(16)
Loop Until InKey$ = " " Or Comd = " " ' press space to quit
Close
End

Lclient1
Code: (Select All)

Rem Project to simulate a server with multiple clients TCP/IP

Rem the second program is the first client side of the network

Screen _NewImage(800, 640, 32)
Cls , _RGBA32(128, 200, 200, 255)
_ScreenMove 400, 100
_PrintString (10, 200), "testing if CLIENT is already ON"

Dim Server As Long
Server = _OpenClient("TCP/IP:7319:localhost")
If Server Then Msg$ = "Client is ON" Else Msg$ = "Cannot activate Client..."
_PrintString (10, 230), Msg$

If Server = 0 Then
    Server = _OpenClient("TCP/IP:7319:localhost") ' it tries a second time the connection with Host
    If Server = 0 Then Msg$ = "Failed to activate server Client. Client is OFF" Else Msg$ = " Activated Server Client. Client is ON"
    _PrintString (10, 300), Msg$
    If Server = 0 Then End
End If


Rem here Client waits user input and sends this to Host

Dim Comd As String

Do
    _Delay 1
    Cls , _RGBA32(128, 200, 200, 255)
    _PrintString (10, 100), "Client is ON, press c/C to change color, s/S to sound notes and space key to quit"
    Comd = "" ' it deletes previous command read by client
    Comd = InKey$

    If Comd <> "" Then Put #Server, , Comd ' has Cli(n) sent data?

    ' data executor
    Select Case Comd
        Case " ":
            _PrintString (10, 200), " > Quitting command sent"
            ' it quits
        Case "c", "C":
            _PrintString (10, 200), " > Changing color command sent" ' it changes color
        Case "s", "S":
            _PrintString (10, 200), " > Playing sound command sent" ' it sounds some notes
    End Select
Loop Until InKey$ = " " Or Comd = " " ' press space to quit
Close
End

Lclient2
Code: (Select All)

Rem Project to simulate a server with multiple clients TCP/IP

Rem the second program is the first client side of the network

Screen _NewImage(800, 640, 32)
Cls , _RGBA32(33, 72, 200, 255)
_ScreenMove 600, 100
_PrintString (10, 200), "testing if CLIENT is already ON"

Dim Server As Long
Server = _OpenClient("TCP/IP:7319:localhost")
If Server Then Msg$ = "Client is ON" Else Msg$ = "Cannot activate Client..."
_PrintString (10, 230), Msg$

If Server = 0 Then
    Server = _OpenClient("TCP/IP:7319:localhost") ' it tries a second time the connection with Host
    If Server = 0 Then Msg$ = "Failed to activate server Client. Client is OFF" Else Msg$ = " Activated Server Client. Client is ON"
    _PrintString (10, 300), Msg$
    If Server = 0 Then End
End If


Rem here Client waits user input and sends this to Host

Dim Comd As String

Do
    _Delay 1
    Cls , _RGBA32(33, 72, 200, 255)  '  typo error _RGBA32(128, 200, 200, 255)
    _PrintString (10, 100), "Client is ON, press c/C to change color, s/S to sound notes and space key to quit"
    Comd = "" ' it deletes previous command read by client
    Comd = InKey$

    If Comd <> "" Then Put #Server, , Comd ' has Cli(n) sent data?

    ' data executor
    Select Case Comd
        Case " ":
            _PrintString (10, 200), " > Quitting command sent"
            ' it quits
        Case "c", "C":
            _PrintString (10, 200), " > Changing color command sent" ' it changes color
        Case "s", "S":
            _PrintString (10, 200), " > Playing sound command sent" ' it sounds some notes
    End Select
Loop Until InKey$ = " " Or Comd = " " ' press space to quit
Close
End

Lclient3
Code: (Select All)

Rem Project to simulate a server with multiple clients TCP/IP

Rem the second program is the first client side of the network

Screen _NewImage(800, 640, 32)
Cls , _RGBA32(128, 200, 67, 255)
_ScreenMove 1200, 200
_PrintString (10, 200), "testing if CLIENT is already ON"

Dim Server As Long
Server = _OpenClient("TCP/IP:7319:localhost")
If Server Then Msg$ = "Client is ON" Else Msg$ = "Cannot activate Client..."
_PrintString (10, 230), Msg$

If Server = 0 Then
    Server = _OpenClient("TCP/IP:7319:localhost") ' it tries a second time the connection with Host
    If Server = 0 Then Msg$ = "Failed to activate server Client. Client is OFF" Else Msg$ = " Activated Server Client. Client is ON"
    _PrintString (10, 300), Msg$
    If Server = 0 Then End
End If


Rem here Client waits user input and sends this to Host

Dim Comd As String

Do
    _Delay 1
    Cls , _RGBA32(128, 200, 67, 255)   ' typo error _RGBA32(128, 200, 200, 255)
    _PrintString (10, 100), "Client is ON, press c/C to change color, s/S to sound notes and space key to quit"
    Comd = "" ' it deletes previous command read by client
    Comd = InKey$

    If Comd <> "" Then Put #Server, , Comd ' has Cli(n) sent data?

    ' data executor
    Select Case Comd
        Case " ":
            _PrintString (10, 200), " > Quitting command sent"
            ' it quits
        Case "c", "C":
            _PrintString (10, 200), " > Changing color command sent" ' it changes color
        Case "s", "S":
            _PrintString (10, 200), " > Playing sound command sent" ' it sounds some notes
    End Select
Loop Until InKey$ = " " Or Comd = " " ' press space to quit
Close
End

Well save files with its own name, compile them with F11  (only EXE) and at the end run Host with double click on it.

Play press c/C or s/S and jumping from a client to another...
pressing space bar key the client active and the host stop running.
I have left the END instruction to let see what happens in the different applications windows... but the best is to close all applications. No such more code just few lines to get this result.


RE: a little TCP/IP network in LocalHost - TempodiBasic - 10-08-2024

Thanks to Pete for recognizing my typo error for backgroung refresh.