Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - TCP Client Server
Forum - C# / VB.NET - TCP Client Server

Avatar
albertino (Normal User)
Newbie


Messaggi: 10
Iscritto: 05/02/2010

Segnala al moderatore
Postato alle 0:39
Sabato, 06/03/2010
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 il 06/03/2010 alle 0:40
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:26
Sabato, 06/03/2010
http://totem.altervista.org/guida/versione3/D4%20-%20I%20S ...

P.S.: credo che tu non ti riferisca alla classe Semaphore, vero?

PM Quote
Avatar
albertino (Normal User)
Newbie


Messaggi: 10
Iscritto: 05/02/2010

Segnala al moderatore
Postato alle 10:22
Sabato, 06/03/2010
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.......

Codice sorgente - presumibilmente VB.NET

  1. Public Class srv
  2.  
  3.     Dim serverSocket As New TcpListener(8889)
  4.     Dim clientSocket As TcpClient
  5.  
  6.     Public Sub start()
  7.  
  8.         serverSocket.Start()
  9.         MsgBox("Server Started")
  10.         clientSocket = serverSocket.AcceptTcpClient()
  11.         listen()
  12.  
  13.     End Sub
  14.  
  15.     Public Sub listen()
  16.  
  17.         While (True)
  18.             Try
  19.                 Dim networkStream As NetworkStream = _
  20.                         clientSocket.GetStream()
  21.                 Dim bytesFrom(10024) As Byte
  22.                 networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
  23.                 Dim dataFromClient As String = _
  24.                         System.Text.Encoding.ASCII.GetString(bytesFrom)
  25.                 dataFromClient = _
  26.             dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
  27.                 'msg("Data from client -  " + dataFromClient)
  28.                 ChangeState(dataFromClient)
  29.                 Dim serverResponse As String = _
  30.                     "Server response"
  31.                 Dim sendBytes As [Byte]() = _
  32.                     Encoding.ASCII.GetBytes(serverResponse)
  33.                 networkStream.Write(sendBytes, 0, sendBytes.Length)
  34.                 networkStream.Flush()
  35.             Catch ex As Exception
  36.                 MsgBox(ex.ToString)
  37.             End Try
  38.         End While
  39.  
  40.     End Sub
  41.  
  42.     Public Sub ChangeState(ByVal dataFromClient As String)
  43.  
  44.         If dataFromClient = "B1" Then
  45.             Form1.Panel1.BackColor = Color.Blue
  46.         ElseIf dataFromClient = "B2" Then
  47.             Form1.Panel1.BackColor = Color.Red
  48.         End If
  49.  
  50.     End Sub
  51.  
  52.     Public Sub sto()
  53.  
  54.         clientSocket.Close()
  55.         serverSocket.Stop()
  56.  
  57.     End Sub
  58.  
  59. 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 il 06/03/2010 alle 18:07
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:14
Domenica, 07/03/2010
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:

PM Quote
Avatar
albertino (Normal User)
Newbie


Messaggi: 10
Iscritto: 05/02/2010

Segnala al moderatore
Postato alle 18:18
Martedì, 09/03/2010
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 ?

PM Quote