Povia e il concerto annullato: ‘etichettato come cantante di destra’
Musica: il cantante Povia polemico con l’estremizzazione: ‘il mio concerto è stato annullato, perchè etichettato come cantante di destra’ Il ...
Musica: il cantante Povia polemico con l’estremizzazione: ‘il mio concerto è stato annullato, perchè etichettato come cantante di destra’ Il ...
Un sondaggio ha evidenziato ancora una volta, quello che purtroppo già da qualche anno era venuto alla luce: La Gen ...
Un ritrovamento ha scosso il mondo dell’archeologia: scoperto il segreto della ‘Mummia urlante’ Nel 1935, una spedizione archeologica a Deir ...
Il caffè può essere un alleato quotidiano per il benessere fisico dell’intestino, selezionando i batteri buoni del microbiota, ma come? ...
Carceri, il trend è allucinante. dal 2014 a oggi sono stati oltre 600 i suicidi e si rischia un triste ...
Dalla paralisi all’infarto, cosa rischi se ti colpisce un fulmine In Italia, la stagione estiva porta con sé non solo ...
Ieri ho scritto un articolo su come inviare dei messaggi via Socket. Come promesso sono qua a scrivervi su come realizzare un ricevitore di messaggi via Socket. Naturalmente come ieri le classi da importare nel progetto sono le stesse e vi invito a vederle nel articolo di ieri.
Io ho realizzato una applicazione di console la quale non fa nient’altro che scrivere sulla console i messaggi inviati dal mittente. Nella main della mia applicazione ho inserito tutto il codice che si mette in ascolto su una determinata porta del mio PC. Il codice è questo:
Dichiarate le seguenti variabili:
Dim host As IPAddress
Dim mySock As Socket
Dim ip As IPHostEntry
Dim ep As IPEndPoint
Dim listener As TcpListener
Una volta dichiarate le variabili ecco qua il corpo del programma. Qua viene utilizzata una funzione che elabora il messaggio in ingresso:
Try
‘Viene preso l’IP della macchina locale
ip = Dns.GetHostEntry(Dns.GetHostName())
host = IPAddress.Parse(ip.AddressList(0).ToString())
‘Creato l’EndPoint sulla porta 8200 (Porta di ascolto)
ep = New IPEndPoint(host, 8200)
‘Dichiarato il Socket di tipo TCP
mySock = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
‘Dichiarata variabile di tipo TCPListener per far partire l’ascolto
listener = New TcpListener(ep)
listener.Start()
While True
‘Aspetto una connessione
mySock = listener.AcceptSocket()
‘Quando arriva la connessione chiamo la funzione Elabora Messaggio passando il socket
ElaboraMessaggio(mySock)
End While
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
La funzione che Elabora il messaggio in ingresso invece è cosi composta:
Dim buffer(1024) As Byte
Dim ByteDaLeggere As Integer
Una volta dichiarato il buffer e una variabile di tipo integer che ci dice quanto dobbiamo leggere, il codice è questo:
Try
‘Controllo se il socket è ancora connesso
If mySocket.Connected Then
‘Ricavo la lunghezza dei byte da leggere. Qua viene caricato anche il buffer
ByteDaLeggere = mySocket.Receive(buffer)
‘Faccio l’encoding del buffer per ricavare la stringa
Dim ritorno As String = Encoding.ASCII.GetString(buffer)
‘Scrivo il messaggio letto
Console.WriteLine(ritorno.TrimEnd())
End If
Catch ex As Exception
Throw ex
End Try
Se ci sono connessioni lente e messaggi tanto lunghi bisogna naturalmente ciclare sulla funzione di lettura fino a quando non si leggono tutti i byte. Questo è tutto. Nel video sotto potete vedere il risultato della applicazione di ieri e quella di oggi. Un invio e ricezione in questo caso sulla stessa macchina.
© 2024 G Tech Group S.R.L.S. – Via di Gagia 22, 38086 Giustino (TN) – P.IVA 02743570224 – REA TN – 246638 – SDI SZLUBAI -PEC gtechgroupsrls@postacert.eu
8 risposte
A me da errore… Devo creare una Funzione?
Si.. questo è soltanto un pezzo di codice da integrare nel tuo progetto…
Scusate ragazzi la mia ignoranza, ma se devo inserire variabili custom come faccio?
Quali variabili custom?
Post illuminante, complimenti.
Ci ho provato anche io e funziona, almeno in locale le 2 applicazioni si parlano.
Però vorrei fare di più: il listener deve a sua volta rispondere, quindi vorrei ricevere il messaggio nella stessa applicazione da cui l’avevo inviato (cioè ognuna delle 2 parti deve fare da invio e da listener). Come si procede in questi casi?
Ciao Ghibo,
Una volta che si crea il canale di comunicazione tra i due client sullo stesso socket puoi rispondere quello che vuoi. Prima di fare il send controlla se il canale è ancora aperto.
Ciao
Ma come si fa a far inviare messaggi ad altre persone che non si trovano nella stessa rete locale lan?
Ciao,
perchè se questo codice lo applico all’interno di un servizio Windows non funziona? Si blocca al metodo AcceptSocket().
Tale procedura è perfettamente funzionante in una WinForm.
Grazie