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 - [C#.Net] Utilizzo Socket Client/Server
Forum - C# / VB.NET - [C#.Net] Utilizzo Socket Client/Server

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Darkos (Normal User)
Newbie


Messaggi: 19
Iscritto: 11/01/2010

Segnala al moderatore
Postato alle 21:50
Venerdì, 29/01/2010
Salve a tutti.
Vorrei realizzare una piccola chat in C# Client/Server.
Visto che mi hanno sconsigliato più volte il WinSock di Win vorrei sapere come utilizzare queste classi in .Net
La cosa che trovo strana è come sia possibile che per controllare l'arrivo di dati ci sia bisogno di un timer.. non occuperebbe troppa memoria?
O magari esiste un modo per creare degli handler?

In più volevo sapere se avete una guida da consigliarmi.. fin ora sono riuscito solo ad aprire il Listner, visto che mi sembra strano che devo mettere un timer per controllare se arrivata una richiesta di connessione

Grazie Mille

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:08
Venerdì, 29/01/2010
In che senso? Cosa hai usato? Cosa hai scritto?

Con la classe TcpListener crei un server che ascolta e con il metodo AcceptTcpClient attendi e accetti una connessione da un client ... cosa c'entra il timer?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Darkos (Normal User)
Newbie


Messaggi: 19
Iscritto: 11/01/2010

Segnala al moderatore
Postato alle 22:26
Venerdì, 29/01/2010
Ho scritto solo un tasto che al click mi apre il listner, non riesco ad andare avanti

Il punto è che mi serve un evento sotto il quale ci metto AcceptTcpClient
Non posso mica mettere un timer start e stop ogni volta che voglio controllare se arriva la richiesta.. e se arrivano dati ad esempio.. proprio questo è il mio dubbio.. come?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:01
Sabato, 30/01/2010
Te l'ho fatto notare nell'altra discussione:


Testo quotato

Postato originariamente da Darkos:
E come faccio senza gli eventi o_O?
Esempio.. al posto di un dataarrival mica ci posso mettere un timer che controlla se arriva il data!


Invece si usa proprio questo... Dopotutto cosa fa il componente winsock se non guardare ogni tot che non ci siano dati in arrivo?


Listener.Pending() restituisce True se c'è una richiesta in attesa.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:04
Sabato, 30/01/2010
Testo quotato

Postato originariamente da Darkos:

Ho scritto solo un tasto che al click mi apre il listner, non riesco ad andare avanti



Hai diverse soluzioni ... la prima, come ti è stato detto da Totem, è controllare periodicamente l'arrivo di una connessione tramite la Pending (con un timer oppure, meglio, all'interno di un apposito thread in un ciclo).

La seconda, come ti avevo suggerito, è quella di usare il metodo AcceptTcpClient per attendere l'arrivo di una connessione. Dato che il metodo AcceptTcpClient è "bloccante", dovrai usare necessariamente un altro thread ma eviterai loop e timer (userai solo una Sleep).

La terza, è quella di usare metodi "asincroni" come BeginAcceptTcpClient ed EndAcceptTcpClient tramite i quali puoi creare effettivamente un evento che viene chiamato in maniera asincrona quando si verifica la connessione.
Ma questo metodo è un po' piu' complesso da usarsi e se non hai un po' d'esperienza ti consiglio gli altri.

Il metodo AcceptTcpClient mi sembra la migliore soluzione anche perchè il programma del tipo che stai scrivendo, presuppone l'uso del multithreading ...

Ultima modifica effettuata da nessuno il 30/01/2010 alle 11:07


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Darkos (Normal User)
Newbie


Messaggi: 19
Iscritto: 11/01/2010

Segnala al moderatore
Postato alle 16:08
Sabato, 30/01/2010
Grazie mille, funziona

Il punto è che funziona solo con un solo TcpListener ed un solo client.
Per creare una chat fra più utenti come posso fare?
Vorrei che i client si connettessero ad un server..
Ho provato con un array di TcpListener però mi da errore, mi dice che non è possibile trasformarlo in matrice

Avete delle idee? O meglio, sapete come posso fare?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:50
Sabato, 30/01/2010
Testo quotato

Postato originariamente da Darkos:

Grazie mille, funziona

Il punto è che funziona solo con un solo TcpListener ed un solo client.



Funziona ... cosa? Quale soluzione ?

In ogni caso, una volta che è stata accettata la connessione con un nuovo client, devi passare l'oggetto client ad un altro thread per gestire la comunicazione e creare una nuova istanza di client per attendere una nuova connessione.

Se non hai molta pratica con la programmazione multithreading, non potrai scrivere facilmente questo tipo di programmi ... te l'avevo gia' detto ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Darkos (Normal User)
Newbie


Messaggi: 19
Iscritto: 11/01/2010

Segnala al moderatore
Postato alle 17:04
Sabato, 30/01/2010
Ho fatto un timer con Listener.Pending() e funziona, si connette

Comunque ok, prima però devo imparare i thread
Non mi prendere in giro, non ho mai avuto bisogno di essi :asd:

Percaso c'hai una guida da consigliarmi online? 8-|

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:08
Sabato, 30/01/2010
Testo quotato

Postato originariamente da Darkos:

Ho fatto un timer con Listener.Pending() e funziona, si connette



Secondo me, erano meglio gli altri metodi ... comunque ...

Testo quotato

Comunque ok, prima però devo imparare i thread



Esatto

Testo quotato

Non mi prendere in giro, non ho mai avuto bisogno di essi :asd:



E chi ti prende in giro? Sono serio ...

Testo quotato

Percaso c'hai una guida da consigliarmi online? 8-|



E su cosa? Ti sconsiglio le guide online ... studia dai libri ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo