URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2891
[ Назад ]

Исходное сообщение
"Socket в качестве сервера"

Отправлено Brick , 04-Май-04 22:57 
Написал сервер с сокетом, но чё-то всё не так, как надо идёт:
Сервер должен сначало получать от клиента запрос, после получения такового он соответсвенно ему выдаёт нужную инфу клиенту, трудность заключается в том, как сделать так, чтобы клиенту каждый раз не надо было отсоедниняться и в любой момент можно было получить информацию???

вот часть кода:
.......................
for ( ; ; ) {

if((client_so = accept(server_so, (struct sockaddr*)&client_address, (socklen_t *)&sock_size)) == -1) {
shutdown(server_so, 0);
printf("Can't ACCEPT connection\n");
return -1;
}
else {


char buf[NET_BUF_SIZE];

//Get action
recv(client_so, buf, NET_BUF_SIZE, 0);

//Send number of records
char n[NET_BUF_SIZE];
int nums = baseNums();
sprintf(n, "%i", nums);
send(client_so, n, NET_BUF_SIZE, 0);

switch(atoi(buf)) {

case GET_IP:

for (int i = 1; i <= nums; i++) {
baseRead(i, IP, buf);
send(client_so, buf, NET_BUF_SIZE, 0);
}

break;

case GET_ACCESS:

for (int i = 1; i <= nums; i++) {
baseRead(i, ACCESS, buf);
send(client_so, buf, NET_BUF_SIZE, 0);
}

break;

}
}

}

shutdown(server_so, 2);

........................


Содержание

Сообщения в этом обсуждении
"Socket в качестве сервера"
Отправлено XMan , 04-Май-04 23:53 
В простейшем случае - fork. В родителе закрываешь новое соединение и возвращаешься на прослушивание. В потомке в цикле общаешься, пока соединение не будет закрыто тобой или им.

PS. Заодно узнаешь, как от зомби избавляться :)


"Socket в качестве сервера"
Отправлено Brick , 05-Май-04 11:00 
>В простейшем случае - fork. В родителе закрываешь новое соединение и возвращаешься
>на прослушивание. В потомке в цикле общаешься, пока соединение не будет
>закрыто тобой или им.
>
>PS. Заодно узнаешь, как от зомби избавляться :)


Тоесть получается в цыкл нужно ещё загонять и обмен сообщениями, но как тогда проверить не отсоединился ли клиет?

И куда припхнуть этот fork??? ;)))


"Socket в качестве сервера"
Отправлено Faust , 06-Май-04 09:27 
>>В простейшем случае - fork. В родителе закрываешь новое соединение и возвращаешься
>>на прослушивание. В потомке в цикле общаешься, пока соединение не будет
>>закрыто тобой или им.
>>
>>PS. Заодно узнаешь, как от зомби избавляться :)
>
>
>Тоесть получается в цыкл нужно ещё загонять и обмен сообщениями, но как
>тогда проверить не отсоединился ли клиет?
>
>И куда припхнуть этот fork??? ;)))


пачитай маны по fork он толька разделяєт працес.
тоєсть от так
           |
          / \
         1    2
         |    |
тепер ани 2 различниє процесси. Икогда ти папробуєш записать в
закририй сокет он тебе скажет))))
он может вилетать по таймауту то сматри.


"Socket в качестве сервера"
Отправлено Brick , 06-Май-04 18:07 
Как использовать fork я так и не понял, но с select вроде всё идёт ;)