Соединение сокетов на одном компе и при удаленном соединении
Код:
IPHostEntry^ ipHostInfo = Dns::Resolve(server);
System::Net::IPAddress^ ipAddress = ipHostInfo->AddressList[0];//Узнаем IP-адрес
IPEndPoint^ endPoint = gcnew IPEndPoint(ipAddress, port);
_durakSocket = gcnew Socket(endPoint->AddressFamily, SocketType::Stream,ProtocolType::Tcp);//инициализируем сокет
System::Net::IPAddress^ ipAddress = ipHostInfo->AddressList[0];//Узнаем IP-адрес
IPEndPoint^ endPoint = gcnew IPEndPoint(ipAddress, port);
_durakSocket = gcnew Socket(endPoint->AddressFamily, SocketType::Stream,ProtocolType::Tcp);//инициализируем сокет
В том случае, если создавать сокет первым IP-адресом из списка
System::Net::IPAddress^ ipAddress = ipHostInfo->AddressList[0];
то спокойно могут подключаться клиенты из локалки, но при попытке создать такой же клиент на том же компьютере, где находится сервак, клиент не видит созданного сервера.
Если инициализировать сокет IP-адресом 127.0.0.1
получается обратная ситуация-клиенты на том же компе видят сервер, клиенты с других компов-не видят.
Мне же желательно, чтобы могли подключаться отовсюду.
В чем загвоздка?
Цитата: Karrde
Если инициализировать сокет IP-адресом 127.0.0.1
получается обратная ситуация-клиенты на том же компе видят сервер, клиенты с других компов-не видят.
Это адрес обратной петли, который привязан только к локальной машине. Он может работать вообще без наличия сетевой карты. Соответственно, он не имеет к реальной сети никакого отношения.
Цитата: Karrde
В том случае, если создавать сокет первым IP-адресом из списка
System::Net::IPAddress^ ipAddress = ipHostInfo->AddressList[0];
то спокойно могут подключаться клиенты из локалки, но при попытке создать такой же клиент на том же компьютере, где находится сервак, клиент не видит созданного сервера.
Ты используешь 127.0.0.1 для клиентов? Или AddressList[0]? Если первое - то ничего удивительного, адреса-то разные, пусть и привязаны к одной машине.
Я использую AddressList[0]. Но тогда не может подключаться клиент, находящийся на одном компе с серваком.
Цитата: Karrde
Я использую AddressList[0]. Но тогда не может подключаться клиент, находящийся на одном компе с серваком.
Перечитай моё сообщение выше...
Используй и для сервера, и для клиентов всегда адрес интерфейса, а не обратной петли.