Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Comunicazione tra un Client e più Server
Forum - C# / VB.NET - Comunicazione tra un Client e più Server

Avatar
allamac74 (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/10/2013

Segnala al moderatore
Postato alle 14:07
Martedì, 22/10/2013
Ciao a tutti vi spiego in dettaglio l'applicazione:
Ho realizzato dei contatori geiger, la scheda monta un Pic18 con periferica Ethernet che funziona da server,
ora voglio controllarli con un pc.. e ricevere i dati delle misure fatte.

Sto scrivendo la mia prima applicazione in vb.net , e sono insicuro sulla strategia da utilizzare
avrei delle domande da porre:

1) quando apro una connessione l'indirizzo ip cambia per ogni dispositivo, deve cambiare anche la porta?

2) posso mantenere circa 10 comunicazioni aperte in contemporanea?

ringrazio chiunque mi possa dare delle dritte

GRAZIE ciao


se non provi non otterrai risultati...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:13
Martedì, 22/10/2013
1) No, se cambia il dispositivo e l'IP, la porta non c'è nessuna necessità di cambiarla. Anzi, il programma sul PIC lavorerà sempre su una porta ben stabilita.

2) Puoi mantenere aperte tutte le comunicazioni che vuoi, ma chiarisci la domanda ... con 10 device diversi? con lo stesso device? il problema è lato PC o device?

E poi, con quale protocollo lavorerà il Pic ? TCP ? UDP ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
allamac74 (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/10/2013

Segnala al moderatore
Postato alle 14:43
Martedì, 22/10/2013
grazie per le risposte, hai fatto centro!!

entrambe le risposte che mi hai dato sono utilissime .

Il pic lavora con protocollo TCP (qui nessun problema), i dispositivi potrebbero essere  N (~10/15) ogni dispositivo è un server.

Attualmente ho provato a comunicare con la classe system.net.socket..  ho notato che la connessione del socket è "lenta", circa 7/8 secondi per connettersi e avere un socket disponibile..

ho letto sul sito che si può usare più semplicemnte la classe client quasi quasi stasera ci provo..

scusate se non mi spiego bene e in gergo tecnico


se non provi non otterrai risultati...
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:16
Martedì, 22/10/2013
Sì, puoi usare più semplicemente la classe TCPClient

Sulla lentezza, sicuramente dipenderà dal dispositivo ... un PIC non ha molte risorse. Però mi sembra sempre un po' tanto ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
allamac74 (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/10/2013

Segnala al moderatore
Postato alle 18:12
Martedì, 22/10/2013
Si ci mette troppo ... è un tempo imbarazzante, credo che sia il codice vb che ho "ripreso" e modificato da un esempio nella MSDN..

Comunque proverò con la classe tcpclient e ti farò sapere

grazie per il tuo aiuto

ciao


se non provi non otterrai risultati...
PM Quote
Avatar
Snogar (Normal User)
Pro


Messaggi: 130
Iscritto: 09/01/2012

Segnala al moderatore
Postato alle 21:03
Martedì, 22/10/2013
Posta il codice magari c'è qualche falla li dentro.


PM Quote
Avatar
allamac74 (Normal User)
Newbie


Messaggi: 4
Iscritto: 22/10/2013

Segnala al moderatore
Postato alle 13:23
Mercoledì, 06/11/2013
Scusate l'assenza..  posto il codice che stabilisce una connessione con il server in modo molto lento

Codice sorgente - presumibilmente VB.NET

  1. Public Function ConnectSocket(ByVal server As String, ByVal port As Integer) As Boolean
  2.  
  3.         Dim msg As String
  4.  
  5.         Try
  6.             s = CntSkt(server, port)
  7.             If s.Connected = True Then
  8.                 Return True
  9.                 Link = True
  10.             Else
  11.                 Return False
  12.             End If
  13.  
  14.  
  15.         Catch ex As Exception
  16.             msg = ex.Message
  17.             MsgBox(msg, MsgBoxStyle.Critical, "function connect socket")
  18.  
  19.         End Try
  20.  
  21.     End Function
  22.  
  23.     Private Function CntSkt(ByVal server As String, ByVal port As Integer) As Socket
  24.         Dim Msg As String = ""
  25.         'Dim s As Socket = Nothing
  26.         Dim hostEntry As IPHostEntry = Nothing
  27.  
  28.         ' Get host related information.
  29.         hostEntry = Dns.GetHostEntry(server)
  30.  
  31.         ' Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
  32.         ' an exception that occurs when the host host IP Address is not compatible with the address family
  33.         ' (typical in the IPv6 case).
  34.         Dim address As IPAddress
  35.         Try
  36.             For Each address In hostEntry.AddressList
  37.                 Dim endPoint As New IPEndPoint(address, port)
  38.                 Dim tempSocket As New Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
  39.  
  40.                 tempSocket.Connect(endPoint)
  41.  
  42.                 If tempSocket.Connected Then
  43.                     s = tempSocket
  44.                     Msg = "Device is connected! " & Chr(13) & s.RemoteEndPoint.ToString()
  45.                     'Msg = "Device is connected! " & Chr(13) & tempSocket.RemoteEndPoint.ToString()
  46.                     MsgBox(Msg, MsgBoxStyle.Information, "Link Status")
  47.                     Link = True
  48.                     Exit For
  49.                 End If
  50.  
  51.             Next address
  52.         Catch ex As Exception
  53.  
  54.             'msg = ex.ToString()
  55.             Msg = "Device is disconnected!" & Chr(13) & ex.ToString()
  56.             MsgBox(Msg, MsgBoxStyle.Information, "Link Status")
  57.             Link = False
  58.         End Try
  59.         Return s
  60.     End Function



Usando la classe tcpclient la connessione avviene in pochi millisecondi..

giunto a questo punto ho voluto calcolare quanto tempo impiega il server a rispondere ad un comando generico, es. : inizia a contare e il server risponde ok comando ricevuto.
per calcolare il tempo ho inizializzato nella variabile StartTime as date  = now all'inizio della funzione
e assegnato a endTime as  date = now alla fine.
fin qui tutto ok :rotfl: ora sottraggo startTime da endTime  per otttenere il tempo impiegato.
Ora ho la possibilità di ottenere il tempo in millisecond o totalmillisecond

il risultato con funzione millisecond è di 50 millisecondi mentre in totalmillisecond è di 64,002
qualcuno sa dirmi perchè??

il tempo mi serve per capire a quanti dispositivi(server) posso inviare una richiesta di dati, nel tempo di un secondo





se non provi non otterrai risultati...
PM Quote