J'ai implémenté un serveur, et j'essaie maintenant de le rendre multithread, mais j'ai rencontré un problème en raison de l'échec du serveur lors de la réception des données et du StreamWriter
de lire les données du Stream
.Serveur multi-thread
Le code est le suivant:
class whereisServer
{
static Socket connection;
static object threadLock = new object();
static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(Run));
t.Start();
}
static void Run()
{
NetworkStream socketStream;
TcpListener listener;
const int PORT = 43;
try
{
listener = new TcpListener(IPAddress.Any, PORT);
listener.Start();
while (true)
{
connection = listener.AcceptSocket();
socketStream = new NetworkStream(connection);
try
{
connection.ReceiveTimeout = 1000;
connection.SendTimeout = 1000;
Thread t = new Thread(new ParameterizedThreadStart(DoRequest));
t.Start(socketStream);
//DoRequest(socketStream);
}
catch (IOException e)
{
Console.WriteLine(e.Message + "\nTimeOut Handled");
}
finally
{
socketStream.Close();
connection.Close();
}
}
}
catch (SocketException e)
{
Console.WriteLine(e.Message);
}
}
static void DoRequest(object stream)
{
NetworkStream socketStream = (NetworkStream)stream;
StreamWriter writer = new StreamWriter(socketStream);
StreamReader reader = new StreamReader(socketStream);
lock (threadLock)
{
//DO SERVER STUFF HERE
}
Lorsque vous appelez la méthode DoRequest
sans fils le programme fonctionne très bien, mais en commentant cela et appeler la version filetée c'est lorsque les problèmes surviennent.
Je serais reconnaissant si quelqu'un pourrait suggérer pourquoi le Stream
est incapable de fonctionner.
Il serait utile si vous nous avez donné votre message d'erreur .. nous ne pouvons que deviner quel est le problème autrement. –
L'exception dit que le "stream n'a pas été inscriptible" De plus, il est dit que mes StreamWriter et StreamReader sont égaux à null bien que je les aie créés.Ce code fonctionne très bien quand je n'utilise pas le threading –