simple TCP Server

 
0
 
.NET
ava
ПашкаКорчагин | 30.12.2007, 11:55
Написал небольшой ТСР сервер .. вроде бы все ок... но корректно работает через раз
каждый второй клиент зависает в cListener.AcceptTcpClient() ... при дебаге на строчке тайм-аут ексепшн
скорее всего что-то где-то упустил.. было бы неплохо если бы хто-то подсказал что именно... код ниже..


class Server
{
private TcpListener listener;
private bool working = false;
private const int port = 54321;
public static ManualResetEvent tcpClientConnected = new ManualResetEvent(true);


public Server()
{
string hostname = Dns.GetHostName();
IPAddress localIP = Dns.GetHostAddresses(hostname)[0];
listener = new TcpListener(localIP, port);
}

public bool StartServer()
{
Console.WriteLine("start server "+working);
listener.Start();
working = true;
while (working)
{
try
{
tcpClientConnected.Reset();
IAsyncResult asyncResult = listener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptSocketCallback), listener);
tcpClientConnected.WaitOne();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return true;
}
public static void DoAcceptSocketCallback(IAsyncResult ar)
{
Console.WriteLine("accept incomming connection");
TcpListener cListener = (TcpListener)ar.AsyncState;

TcpClient client = cListener.AcceptTcpClient();//timeout exception
Console.WriteLine("crete tcp client");

Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientConnection));
clientThread.Start(client);
tcpClientConnected.Set();
}

private static void HandleClientConnection(Object client)
{
Console.WriteLine("Client handle");
}

}

Comments (1)
ava
tol05 | 31.12.2007, 21:16 #
где вызывается StartServer() и почему в callback-e асинхронного принятия клиента вызывается еще и синхронное?
Я имею в виду то, что в вызове DoAcceptSocketCallback вызывается синхронный AcceptTcpClient() ! А должен-то, по идее, EndAcceptTcpClient().
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit