Как получить IP-адрес от IPEndPoint, полученного в сокете - PullRequest
0 голосов
/ 29 июня 2010
 ipEndReceive = new IPEndPoint(IPAddress.Parse("127.0.0.1"), receivePort);
 receiveSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream
                          , ProtocolType.Tcp);

 ErrorLog.WritetoErrorlog("Trying to Bind IP Address Stored in  Variable : "
                          +ipEndReceive.Address.ToString()
                          +"\n Port No :"+ipEndReceive.Port.ToString(), logPath);

 receiveSock.Bind(ipEndReceive);


 ErrorLog.WritetoErrorlog("\nRemote IP Address : " 
                    + ((IPEndPoint)receiveSock.RemoteEndPoint).Address.ToString()
                    + "\n Local IP:" 
                    + ((IPEndPoint)receiveSock.LocalEndPoint).Address.ToString()
                    , logPath);

Здесь receiveSock.RemoteEndPoint возвращает мне экземпляр EndPoint, а не IPEndPoint, из-за которого я не могу получить удаленный IP-адрес, откуда был получен запрос.У нас есть какой-нибудь способ получить его из этого сокета.

1 Ответ

0 голосов
/ 07 июля 2010

Сокет RemoteEndpoint будет установлен после подключения сокета.

Это означает, что регистрация RemoteEndpoint после привязки некорректна.

RemoteEndPoint устанавливается после вызова либо Принять, либо Подключиться. Если вы попытаетесь получить доступ к этому свойству ранее, RemoteEndPoint сгенерирует исключение SocketException. Если вы получили SocketException, используйте свойство SocketException :: ErrorCode, чтобы получить конкретный код ошибки. После получения этого кода см. Подробное описание ошибки в документации по коду ошибки API Windows Sockets версии 2 в библиотеке MSDN. "

(из MSDN)

...