Ciao a tutti,
Sto realizzando un'applicazione a console di un piccolo server che accetta connessioni tramite socket,fin qui tutto bene dialoga con i client come previsto.
Vorrei inoltre dotare questo server di comandi base come Start Stop etc...il problema si presenta qui....il programma mi rimane in ascolto di eventuali richieste di connessione e non mi da al possibilità di scrivere da tastiera alcunchè nella console.
Avevo pensato di creare 2 thread uno che si occupa di rimanere in ascolto delle connessioni ed un altro che mi gestisce l'imput da tastiera,ma ottengo lo stesso risultato mi si blocca in attesa di connessioni.
Come faccio a fare un socket non bloccante?Sto seguendo la strada giusta utilizzando i thread?
questo è il codice che crea i due thread:
codice:
Thread Tcomandi = new Thread(new ThreadStart(LeggiComando));
Tcomandi.Start();
Thread Tconnessioni = new Thread(new ThreadStart(ascoltoConnessioni));
Tconnessioni.Start();
nel metodo ascoltoConnessioni c'è il codice che si preoccupa di stabilire una connessione tramite il socket.
Codice per intercettare i comandi
codice:
public void LeggiComando(){
Console.WriteLine("inserisci un comando : ");
string comando = Console.ReadLine();
if (comando != "")
{
eseguiComando(comando);
}
Thread.Sleep(500);
}
codice per la gestione del socket
codice:
private void ascoltoConnessioni()
{
Thread.Sleep(500);
//TcpListener is listening on the given port... {
TcpListener tcpListener = new TcpListener(porta);
tcpListener.Start();
Console.WriteLine("Server Started");
//Accepts a new connection...
Socket socketForClient = tcpListener.AcceptSocket();
try
{
if (socketForClient.Connected)
{
Console.WriteLine("Client connected");
NetworkStream networkStream = new NetworkStream(socketForClient);
StreamReader streamReader = new StreamReader(networkStream);
string line = streamReader.ReadLine();
Console.WriteLine("Ping from: " + line);
}
socketForClient.Close();
Console.WriteLine("Exiting...");
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}