Tcpclient e tcplistener in Visual Web Developer

sabato 02 aprile 2011 - 00.15

DeGregoriano Profilo | Newbie

Salve a tutti, avrei bisogno di un aiuto urgente..
sto utilizzando tcpclient e tcplistener (Namespace = System.Net.Sockets) per un semplice esempio di comunicazione in rete fra due utenti.
guardando su msdn ho visto come anche il listener può mandare un messaggio al client dopo averne ricevuto uno da quest'ultimo. in msdn fa tutto ciò in una sola procedura mentre io vorrei che il listenere mandasse il messaggio dopo aver premuto un altro button.
il codice è questo però non funziona...mi sapreste spiegare il perchè? (incollando la procedura del button 4 e accodandola a quella del button3 invece funziona, proprio come fa mdsn) grazie in anticipo....

<script runat="server"> Dim tcpListener As New TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 80) Dim tcpClient As TcpClient Dim networkStream As NetworkStream Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) tcpListener.Start() tcpClient = tcpListener.AcceptTcpClient() Dim bytes(tcpClient.ReceiveBufferSize) As Byte networkStream = tcpClient.GetStream() networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) Dim clientdata As String = System.Text.Encoding.ASCII.GetString(bytes) Label1.Text = clientdata end sub Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim responseString As String = "Connesso al server" Dim sendBytes As [Byte]() = System.Text.Encoding.ASCII.GetBytes(responseString) networkStream.Write(sendBytes, 0, sendBytes.Length) Label3.Text = (responseString) tcpClient.Close() tcpListener.Stop() End Sub </script>

alx_81 Profilo | Guru

>Salve a tutti, avrei bisogno di un aiuto urgente..
ciao

>sto utilizzando tcpclient e tcplistener (Namespace = System.Net.Sockets)
>per un semplice esempio di comunicazione in rete fra due utenti.
>guardando su msdn ho visto come anche il listener può mandare
>un messaggio al client dopo averne ricevuto uno da quest'ultimo.
>in msdn fa tutto ciò in una sola procedura mentre io vorrei che
>il listenere mandasse il messaggio dopo aver premuto un altro
>button.
>il codice è questo però non funziona...mi sapreste spiegare il
>perchè? (incollando la procedura del button 4 e accodandola a
>quella del button3 invece funziona, proprio come fa mdsn) grazie
>in anticipo....
non puoi farlo perchè una pagina web non ha stato come una form di windows. Quindi anche se dichiari le variabili con scope globale, una volta caricata la pagina, non esistono più e non sono più utilizzabili.
Siccome ad ogni click viene reistanziata tutta la classe della tua pagina web, il Button3 fa solo l'operazione definita nel gestore dell'evento ad esso relativo e così anche il Button4, sono completamente staccati e non utilizzano, come credo tu ti aspettassi, la stessa istanza delle tcp variables.. Fatto così non puoi separare. Se hai l'esigenza di effettuare operazioni di questo tipo da web, dovrai usare tecnologie ajax per richiamare un server dedicato che ti smista le chiamate..
Una dll che gestisce la comunicazione, una sorta di servizio con le sue API.. Forse puoi inventarti qualche accrocchio tipo salvare in sessione l'elenco degli oggetti da riutilizzare poi, ma non la vedo una gran soluzione.
A mio avviso il web dovrebbe consumare un servizio che fa solo comunicazione tcp.. vedi un po' questi link:
http://channel9.msdn.com/coding4fun/articles/Basic-Chat-Using-ASP-NET-AJAX
http://forums.asp.net/t/1390863.aspx/1
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5