Trasmissione di dati fra due o più programmi Gambas mediante la Classe Socket del Componente gb.net

Da Gambas-it.org - Wikipedia.

I Socket sono definiti come endpoint di comunicazione e si riferiscono a un mezzo di comunicazione del computer che utilizza indirizzi IP e porte.

I Socket vengono generalmente utilizzati per inviare dati tra due computer su una rete, ma possono anche essere utilizzati per comunicare tra due programmi sullo stesso computer.

La struttura base di funzionamento delle Socket è di tipo Client/Server.
Supponiamo di avere due processi p1 e p2. Il processo p2 ha bisogno del processo p1 per eseguire un determinato compito. Il processo p1 offrirà al processo p2 tale servizio, esso perciò sarà il "Servente" ovvero il Server. Il processo p2 che richiede il servizio sarà dunque il "Cliente", ovvero il Client.

Questa pagina mostrerà come creare un programma Server Socket e due o più programmi Client Socket mediante la Classe "Socket" del Componente Gambas gb.net . [Nota 1]
Dopo aver lanciato il Server e i due Client, si potrà inviare del testo dal primo Client al secondo e viceversa.

Creiamo il "Server Socket":

Public Clients As New Object[]
Private MySock As Socket


Public Sub Form_Open()
 
' Si assegna un numero qualsiasi della porta:
 ServerSocket1.Port = 12345
 ServerSocket1.Type = Net.Internet
   
 Button1.Text = "Attiva il Server..."
  
End

Public Sub Form_Close()

 ServerSocket1.Close
 
End


Public Sub Button1_Click()

 ServerSocket1.Listen(2)
 
 If ServerSocket1.Status = Net.Active Then
   Button1.Enabled = False
   Button1.Background = Color.Green
   Button1.Text = "Server attivo !"
   Me.Caption &= "In attesa sulla Porta: " & ServerSocket1.Port & gb.CrLf
 End If

End

Public Sub ServerSocket1_Connection(HostIP As String)
 
 Me.Text = "Connessione da... " & HostIP
 
 MySock = ServerSocket1.Accept()
 Clients.Add(MySock)
 Object.Attach(MySock, Me, "Forza")
 
 Write #Clients[Clients.Max], "Connessione al Server accettata !\n"
 
End


Public Sub Forza_Read()
 
 Dim strMsg As String
 
 If Last.Status <> Net.Connected Then Return
 
 Read #Last, strMsg, Lof(Last)
 
 TextArea1.Text &= strMsg
 
 If Clients.Count = 1 Then
   Write #Clients[0], strMsg
 Else
   If Last.RemotePort == Clients[0].RemotePort Then
     Write #Clients[1], strMsg
   Else
     Write #Clients[0], strMsg
   Endif
 Endif
 
End

Public Sub TextArea1_MouseUp()
 
 TextArea1.Clear
  
End


Ecco il codice del primo "Client Socket":

Private ClientSock_1 As Socket
Private s As String


Public Sub Button1_Click()
 
 Dim sBuf As String
 
 ClientSock_1 = New Socket As "Server"
 ClientSock_1.Connect("192.168.0.198", 12345)
 Do While (MySock.Status <> 7) And (MySock.Status > 0)
   Wait 0.1
 Loop
 If ClientSock_1.Status <> 7 Then
   Print "Error"
   Quit
 Endif 
 
End

Public Sub Button2_Click()
' Invia testo al Server:
 Write #MySock, TextArea1.Text
 
End

Public Sub Server_Read()       Legge i dati inviati dal Server
 Dim buf As String
 
 Read #MySock, buf, Lof(MySock)
 
 With TextArea1
   .Wrap = True
   .Text = buf & gb.NewLine
   .SetFocus
 End With
 
End

Public Sub Form_Close()
 
 If Socket1.Status > Net.Inactive Then MySock.Close
 
End


Ecco il codice del secondo "Client Socket":


Note

[1] Da vedere le seguenti pagine web:
- http://gambaswiki.org/wiki/doc/network
- http://gambaswiki.org/wiki/comp/gb.net/socket
- http://captainbodgit.blogspot.com/2016/08/using-sockets-with-gambas.html
- https://jsbsan.blogspot.com/2012/07/arduino-y-linux-ejemplo-de-uso-de.html
- https://docs.oracle.com/cd/E19620-01/805-4041/index.html
- http://linuxdidattica.org/docs/altre_scuole/planck/socket/progr-socket.pdf
- https://www.wikihow.it/Controllare-l%27Indirizzo-IP-su-Linux
- https://noviello.it/come-trovare-il-proprio-indirizzo-ip-su-linux/
- https://linuxiano.altervista.org/2019/11/indirizzo-ip-dal-terminale-linux/


Pagina in costruzione !