Здравствуйте, SaNTa_RnD, Вы писали:
SNT>Как написать функцию опроса всех компов в сети(широковещательный запрос). Мне нужно, чтобы программа сокет-клиент могла найти самостоятельно др. прогу — сокет-сервер. Как это сделать? Можно даже привести пример прямо здесь...
Это делается на UDP сокетах
Со своей стороны
bindишь сокет на какой-то порт (обычно заранее оговоренный) и посылаешь пакет (
sendto) на какой-то
оговоренный порт с IP адресом получателя
INADDR_BROADCAST
Перед всем этим, но после создания сокета, следует произвести небольшую операцию — разрешить сокету broadcast сщщбщения, установить флаг
SO_BROADCAST
Небольшой пример:
SOCKET s;
sockaddr_in service;
sockaddr_in RecvAddr;
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
service.sin_family = AF_INET;
service.sin_addr.s_addr = inet_addr(" Твой IP адрес ");
service.sin_port = htons( Твой порт );
bind( s, (SOCKADDR*) &service, sizeof(service));
setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, bOptLen);
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons( Твой порт или порт удаленного хоста );
RecvAddr.sin_addr.s_addr = INADDR_BROADCAST;
sendto(s, SendBuf, BufLen, 0, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr));
Теперь все компьютеры в локальной сети получат твой пакет.
Обычно порты UDP заране оговариваются, но если этого сделано не было, то следует при отправке ответа на broadcast запрос подставить тот порт, который был в запросе. Эту же операцио следует проделать и с IP адресом.