Hallo,
Ich habe einen ServerThread wo sich mehrere Clients Verbinden können. Nach ein paar Nachrichten kommt es immer zu einer Exception dass das Zeitlimitfür die Semaphore erreicht wurde..
public void SendMessage(IMessage msg, MessageHeader header)
{
lock (locker)
{
NamedPipeClientStream client = null;
try
{
client = new NamedPipeClientStream(header.TargetChordNode);
if (!client.IsConnected)
{
client.Connect(3000);
}
//using (client)
//{
ChordNodeBaseHelpingFunctions.SerializeToStream(client, msg);
//client.WaitForPipeDrain();
//}
//client.WaitForPipeDrain();
this.OnSend(new MessageSendEventArgs(msg, header));
}
catch (ArgumentNullException e)
{
}
catch (Exception ex)
{
//throw;
}
finally
{
client.Flush();
client.Close();
client.Dispose();
}
}
}
private void openServer(string ip)
{
try
{
IMessage tmpIMessage = null;
NamedPipeServerStream server = new NamedPipeServerStream(ip);
while (true)
{
server.WaitForConnection();
clientMutex.WaitOne();
tmpIMessage = ChordNodeBaseHelpingFunctions.DeserializeFromStream(server);
this.OnReceive(null, new MessageReceiveEventArgs(tmpIMessage));
server.Flush();
server.Disconnect();
clientMutex.ReleaseMutex();
}
}
catch (Exception e)
{
}
finally
{
// Stop listening for new clients.
}
}