На тему клиент-сервер. К серверу подключился клиент, И нужно узнать, локальный адрес или нет. Как это сделать?
Локальный адрес или нет для кого? Вообще всё просто делается: 1) для уже установленного коннекта (сокета) делай getsockname и getpeername 2) getpeername - вернет IP и PORT удаленного сокета. Для сервера это порт и адрес клиента, для клиента это адрес и порт сервера. getsockname - для локального сокета. 3) Если всё находится на одном и томже компе, то IP должны совпадать
К частным адресам относятся следующие диапазоны (подробности – в документе RFC1918): 10.0.0.0 – 10.255.255.255 (сеть класса A, маска 255.0.0.0) 172.16.0.0 – 172.31.255.255 (16 сетей класса B, маска 255.255.0.0) 192.168.0.0 – 192.168.255.255 (256 сетей класса C, маска 255.255.255.0) Если админ локальной сети дружит со стандартами (читай - с головой), твоя сеть будет иметь один из указанных адресов. Если адрес вне этого диапазона - клиент пришёл "снаружи"
Ну да, если клиентское и серверное приложение пишешь ты, то можно сделать так : 1. При подключении нового клиента - посылаем несколька Broadcast UDP датаграмм. 2. Со стороны клиента при получении такой диаграммы - отвечаем серверу уже TCP сообщение(через уже открытый канал). Фишка в том что Broadcast датаграммы можно отправлять только по локальной сети, только отправляй не одну, а несколько, причем как можно короче по размеру.
2 Jingo Bo dj мноних локалках такая вешь запрещена. Потому что если каждый ком будет отправлять широковещательные запросы, то при 500 компах в локалке, сеть будет ужасно тупить, по этому часто дропают все широковещательные, кроме тех которые нужны для поддержки работы сети. Вообще тогда проще можно сделать. Тупо вбить IP и маску локалки и сравнивать с ней. ну или автоматом брать из таблици маршрутизации