Oppure

Loading
05/03/10 23:39
albertino
Ciao a tutti, questa volta chiedo aiuto per realizzare una cosetta <<banale>>.
Vorrei realizzare una piccolissima applicazione che faccia il seguente lavoro:

Client con due tasti --------- Server con un "semaforo" nel senso letterale della parola.

Client tasto "a" ------------- Server semaforo rosso
Client tasto "b" ------------- Server semaforo verde

Le mie ricerche hanno dato molti frutti ma si tratta sempre di codice incompleto, che poi non riesco a completare oppure di codice troppo complesso.

Vi sarei grato se qualcuno potesse darmi una imbeccata sui codici da scrivere e, lasciandomi lavorare da solo, controllasse ogni tanto i progressi. Solo facendo in questo modo imparo......

Grazie

P.S. Uso VB Express 2008
Ultima modifica effettuata da albertino 05/03/10 23:40
aaa
06/03/10 7:26
Il Totem
totem.altervista.org/guida/versione3/…

P.S.: credo che tu non ti riferisca alla classe Semaphore, vero?
aaa
06/03/10 9:22
albertino
Ciao, no non mi riferisco ad una classe per eventi semaforici, ma proprio a qualcosa di visuale. Immagina una gara di karate. Ci sono dei tatami dove si svolgono degli incontri. Per ogni tatami c'è un computer che segna i punti, le penalità ecc. Al tavolo centrale della giuria c'è un computer con tutte le categorie degli atleti. Al tavolo centrale devono sapere che un determinato incontro sta per finire per preparare la categoria successiva.

Avevo pensato a qualche cosa di visuale. Quando su un computer del tatami si preme un tasto, nel computer centrale un qualcosa passa da rosso a verde.......

Cercando ininternet ho adattato questa classe.......

Public Class srv

    Dim serverSocket As New TcpListener(8889)
    Dim clientSocket As TcpClient

    Public Sub start()

        serverSocket.Start()
        MsgBox("Server Started")
        clientSocket = serverSocket.AcceptTcpClient()
        listen()

    End Sub

    Public Sub listen()

        While (True)
            Try
                Dim networkStream As NetworkStream = _
                        clientSocket.GetStream()
                Dim bytesFrom(10024) As Byte
                networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                Dim dataFromClient As String = _
                        System.Text.Encoding.ASCII.GetString(bytesFrom)
                dataFromClient = _
            dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
                'msg("Data from client -  " + dataFromClient)
                ChangeState(dataFromClient)
                Dim serverResponse As String = _
                    "Server response"
                Dim sendBytes As [Byte]() = _
                    Encoding.ASCII.GetBytes(serverResponse)
                networkStream.Write(sendBytes, 0, sendBytes.Length)
                networkStream.Flush()
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End While

    End Sub

    Public Sub ChangeState(ByVal dataFromClient As String)

        If dataFromClient = "B1" Then
            Form1.Panel1.BackColor = Color.Blue
        ElseIf dataFromClient = "B2" Then
            Form1.Panel1.BackColor = Color.Red
        End If

    End Sub

    Public Sub sto()

        clientSocket.Close()
        serverSocket.Stop()

    End Sub

End Class



Ma ho due problemi che non riesco a risolvere......

1. Quando dal client premo il tasto per inviare il messaggio "B1" il server, invece di colorare il panel di blu, non fa assolutamente niente fino a quando non faccio apparire per esempio una textbox. Pensando che fosse un problema di aggiornamento del form ho provato a inserire Me.refresh() o Me.reload() ma la situazione non cabia .....

2. Non riesco a fermare l'ascolto. Quando ci provo il programma non risponde più e devo chiuderlo dal task manager .......
Ultima modifica effettuata da albertino 06/03/10 17:07
aaa
07/03/10 11:14
Il Totem
Il programma non risponde perchè l'ascolto avviene tramite un ciclo infinito, un approccio decisamente ridicolo e privo di senso che tuttavia continua a vagare per la rete. Ti suggerisco di lasciar perdere quella classe e invece di guardare il link che ti ho proposto. Se adotterai un criterio simile a quello usato nei miei esempi non avrai di questi problemi (anche il primo è dovuto alla stessa ragione).

P.S.: tatami col computer :rotfl::rotfl:
aaa
09/03/10 17:18
albertino
Ok, hai ragione. Ho usato il tuo codice e tutto fnziona a meraviglia. :k: Sono partito dal tuo esempio e ho eliminato tutte le funzioni interattive ed utilizzato solo la parte server.

Cosa mi consigli di fare per una versione per gestire diverse cnnessioni ?
aaa