PDA

View Full Version : winsock


redribbon
15-03-2004, 13:35
ciao.
Sto sudiando come implementare un client server con i socket sotto windows.....
Ho un problema:
volendo implementare un client che permetta di ricevere stringhe e mandare stringhe (un client per una chat) come faccio a fare un controllo se viene inserita una stringa da tastiera?
per i controlli sui socket ho visto che c'è la funzione select che pero sotto windows non va con lo stdin......
qualche consiglio?
grazie :)

cionci
15-03-2004, 14:12
Mmmhh...la select cosa c'entra con lo stdin ? La select la puoi usare anche su Windows... Serve per controllare che si avvenuto un evento su una lista di socket...

redribbon
15-03-2004, 21:58
Originariamente inviato da cionci
Mmmhh...la select cosa c'entra con lo stdin ? La select la puoi usare anche su Windows... Serve per controllare che si avvenuto un evento su una lista di socket...

sotto linux la select riesce a controllare lo stdin come fosse un socket (trattandolo come un file descriptor di valore 0).....
cosi almeno ho letto su molte guide e sempre in molte di queste dicono che sotto windows questo non si puo fare (l'ho provato di persona e non funge).
Come posso fare? c'è qualche altra funzione alternativa?

cionci
15-03-2004, 23:18
Ah...sì...ho capito cosa intendi... E' vero, la select si può usare per l'input asincrono...su Windows no...

E' un casino rimanere sul "portabile" in questi casi...
Le possibilità sono diverse...

1) usi una funzione che rileva la pressione di un tasto: kbhit (non è portabile su Linux) e lo leggi con getch (dovrebbe avere una corrispondenza nella ncurses) che non necessita la pressione dell'INVIO per terminare l'input
2) usi i messaggi di Windows (ancora meno portabile)
3) crei un thread per l'input ed uno che invia i messaggi immessi da tastiera (anche questo è probabilmente poco portabile, dipende da ciò che vuoi usare per la gestione dei thread)

Poi ci sono tante altre soluzioni...

redribbon
16-03-2004, 11:23
Originariamente inviato da cionci
Ah...sì...ho capito cosa intendi... E' vero, la select si può usare per l'input asincrono...su Windows no...

E' un casino rimanere sul "portabile" in questi casi...
Le possibilità sono diverse...

1) usi una funzione che rileva la pressione di un tasto: kbhit (non è portabile su Linux) e lo leggi con getch (dovrebbe avere una corrispondenza nella ncurses) che non necessita la pressione dell'INVIO per terminare l'input
2) usi i messaggi di Windows (ancora meno portabile)
3) crei un thread per l'input ed uno che invia i messaggi immessi da tastiera (anche questo è probabilmente poco portabile, dipende da ciò che vuoi usare per la gestione dei thread)

Poi ci sono tante altre soluzioni...

grazie mille smanettero un po con la prima soluzione :) per le altre non so da dove cominciare !
ciao :)

redribbon
20-03-2004, 16:40
per un altra questione (sempre legata ai socket) devo capire come fare a gestire i threads....
mi potete dare qualche link a guide (anche in inglese) su come "gestire" i threads?
grazie a todos :)