if(WSAGETASYNCERROR(lParam))
{
MessageBox(0, "Could not detect client", "Server Error: ", MB_ICONERROR|MB_OK);
return 0L;
}
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
{
int lenght = sizeof(SOCKADDR);
SOCKADDR_IN clientaddr;
SOCKET client;
memset(&clientaddr, 0, sizeof(SOCKADDR_IN));
client = accept(m_servsock, (LPSOCKADDR)&clientaddr, (LPINT)&lenght);
//....
Получение данных со стороны сервера
со стороны сервера прослушиваю 10000 порт. При соединения клиента
на адресс сервера на этот порт - я получаю сокет клиента, спомощью
сообщения FD_ACCEPT и функции accept.
А как потом узнать, что клиент передал данные с помощью send?
В примере msdn просто со стороны сервера recv зациклен, но это как
не хорошо (особенно если учитывать, что клиентов несколько) - может есть какое-нибудь сообщение, по которму можно со стороны сревера recv вызвать...?
Разберешься? :)
Не совсем понял что тебе нужно. Может неблокирующие сокеты?
ну вообщето это делается с помощью отдельных потоков в общем случае. т.е получил на стороне серва сокет клиента,запускаешь отдельный новый поток и передаешь туда сокет где и его и слушаешь в цикле к примеру. а в основном потоке остаешься принимать другие подключения. эта техника для блокирующих сокетов,с неблокирующими немного другая.
Ну я вот с ними и работаю. - поэтому собираюсь всё водном потоке
сделать. Счас тогда буду в осномном цикле одного птока по нескольку
байт с каждого клиента получать - посмотрю, что из этого получится...
Цитата: bave
Не блокирующие - это всмысле асинхронные?
Ну я вот с ними и работаю. - поэтому собираюсь всё водном потоке
сделать. Счас тогда буду в осномном цикле одного птока по нескольку
байт с каждого клиента получать - посмотрю, что из этого получится...
Ну я вот с ними и работаю. - поэтому собираюсь всё водном потоке
сделать. Счас тогда буду в осномном цикле одного птока по нескольку
байт с каждого клиента получать - посмотрю, что из этого получится...
ДА - асинхронные.
Вообщем после того как клиент соедиеняется, я получаю его сокет и запускаю
новый поток - в этом потоке я сокета клиента пытаюсь получить данные отпрвленные
клиентом с помощью recv - и recv всегда возвращает ошибку: WSAECONNRESET
Т.е. вот так я определяю клиента, кторый соединился:
Код:
И вот потом как только вызываю recv(client, ...) - так получаю WSAECONNRESET
Я даже со стороны клиента пытался закцикливать send - всё равно не пашет.