Столкнулся с проблемой определения версии прокси. Code: public static ProxyType GetProxyVersion(string proxy) { string[] values = proxy.Split(':'); IPEndPoint ipep = new IPEndPoint( IPAddress.Parse(values[0]), Convert.ToInt32(values[1])); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { server.Connect(ipep); //аутентификация server.Send(Encoding.ASCII.GetBytes("data")); byte[] data = new byte[1024]; int receivedDataLength = server.Receive(data); var u =server.Available; string stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength); server.Shutdown(SocketShutdown.Both); } catch (SocketException e) { } server.Close(); return ProxyType.None; } Следовательно метод Connect в данном случае и есть подключение к серверу, но возвращает булевое значение. Так же у сокета имеется свойство Available, которое по идеи должно возвращать байты при Connect. Но этого не происходит. В итоге получается не совсем корректная работа класса Сокет? А так же подскажите пожалуйста в какую сторону хотя бы копать. Заранее благодарен.
Метод Connect не возвращает ничего. Свойство Available возвращает значение, указывающее количество полученных из сети и доступных для чтения данных. Всё правильно работает. Я вообще не понимаю, что именно ты хочешь сделать. Определить SOCKS5 это или SOCKS4? Читай вот это: http://ru.wikipedia.org/wiki/SOCKS
смотрел еще до создания темы Code: try { server.Connect(ipep); //если подключение выполнено идем дальше. var u =server.Available; //следовательно здесь должна быть информация конекта, а именно 2-ое поле\1 байт и есть версия. Но это не работает :) } catch (SocketException e) { //подключение не выполнено }
тогда возникает вопрос, как же все же можно получить эти данные? Потом уже вытянуть версию не проблема
Socket.Receive()/Socket.BeginReceive()=>Socket.EndReceive() или TcpClient.GetStream().Read()/TcpClient.GetStream().BeginRead()=>TcpClient.GetStream().EndRead()