none
Помогите перевести на с# RRS feed

  • Вопрос

  • Я никак смогу перевесит участок кода созадния ip код на с++  в с#  помогите мне перевести. вот код.
    /*
     * AF_INET6 code - the book recommend AGAINST rewriting applications 
    * like this. 
    */ 
    struct sockaddr_in6 sin6; 
    socklen_t salen;
    struct hostent *hp;
    /*
     open the socket - IPv6 only, no IPv4 support 
    */
     s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); 
    if (s < 0) {
     perror(“socket”); 
    exit(1); 
    /*NOTREACHED*/
     } 
    
    /* 
    DNS name lookup - does not support scope ID 
    */
     
    hp = gethostbyname2(hostname, AF_INET6); 
    if (!hp) { fprintf(stderr, “host not found\n”); 
    exit(1); 
    /*NOTREACHED*/ 
    }
    
    16 2.2 Why Programs Need to Be Address-Family Independent?
    
    if (hp->h_length != sizeof(sin6.sin6_addr)) {
     fprintf(stderr, “invalid address size\n”); 
    exit(1); 
    /*NOTREACHED*/
     } 
    memset(&sin6, 0, sizeof(sin6)); 
    sin6.sin6_family = AF_INET6; 
    salen = sin6.sin6_len = sizeof(struct sockaddr_in6); 
    memcpy(&sin6.sin6_addr, hp->h_addr, sizeof(sin6.sin6_addr)); 
    sin6.sin6_port = htons(80); 
    
    /* connect to the peer */ 
    if (connect(s, (struct sockaddr *)&sin6, salen) 0) { perror(“connect”); 
    exit(1); 
    }
    
    первый раз чтото делаю, помогите а
    8 сентября 2015 г. 17:47

Ответы

  • Ещё раз спрашиваю: какую реальную задачу вы решаете?

    Я без труда нашёл источник вашего кода: книга IPv6 Network Programming. Что вы хотите сделать на основе этого кода? Что вы хотите сделать с помощью сокетов?

    В языке C# и платформе .NET есть богатые возможности для работы с сетью. Например, класс System.Net.Sockets.Socket. Используйте его и не нужно будет переводить код с одного языка на другой. Есть класс System.Net.WebClient - с его помощью можно легко загружать любые данные (строки, файлы и пр.) из интернета, а также загружать их туда.

    Повторяю вопрос ещё раз: какую реальную задачу решаете? Опишите её и мы вам скажем, какие классы взять, что именно сделать.

    > Есть ли возможность поставить пакет SYN

    В языках C#/C/C++ не используется понятие "пакет".

    > или другова

    Какого именно? Для какой цели?? КАКУЮ ЗАДАЧУ РЕШАЕТЕ??? Ну, поставьте зелёненький.

    23 сентября 2015 г. 18:32
  • НЕ ПРОВЕРЯЛ НО МНЕ КАЖИТЬСЯ ЧТО ОТВЕТ ЕСТЬ ТАК КАК ЕСТЬ ОБОЗНАЧЕНИЕ ТИПА ПАКЕТА, ПОСЛЕДНИЙ ВОПРОС ЗАРАНИЕ ЕСТЬ ЛИ ВОЗМОЖНОСТЬ поставить обозначение пакета SYN или другова. Извените за капс нехотелось переписывать.

    Если вам нужно работать с RAW-data, то стоит рассмотреть такой вариант: PcapDotNet/Pcap.Net

    А для написания низкоуровневых утилит надо использовать C.

    Могу еще порекомендовать посмотреть исходники примеров: The Windows Network Programming .NET Sample Completed Project

    24 сентября 2015 г. 3:25

Все ответы

  • В C# используется другая модель - .Net.  Socket не используется. Теоретически(сам не проверял), можно импортировать,

    но смысла в этом нет.

    Например - запрос(метод GET) и получение данных. (Framework 2.0).

    string s = null; 
    
    System.Net.WebRequest reqGET =
                     System.Net.WebRequest.Create(@"http://...host name");
                    System.Net.WebResponse resp = null;
                
                    try
                    {
                        s = "";
                        resp = reqGET.GetResponse();
                        System.IO.Stream stream = resp.GetResponseStream();
                        System.IO.StreamReader sr = new System.IO.StreamReader(stream);
                        s = sr.ReadToEnd();
                    }
                    catch (WebException e)
                    {
                        Console.WriteLine("WebException: " + e.Message);
                    }
                    catch (UriFormatException e)
                    {
                        Console.WriteLine("UriFormatWebException: " + e.Message);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("The process failed: {0}", e.ToString());
                    }
    

    8 сентября 2015 г. 19:10
  • Послушайте, а Вы книги по программированию читать не пробовали? Обычно, помогает.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    10 сентября 2015 г. 17:24
  • Послушайте, а Вы книги по программированию читать не пробовали? Обычно, помогает.


    Человек с 2007 года в индустрии разработки ПО, на досуге изучает исходники Windows, а вы тут с такими вопросами...
    10 сентября 2015 г. 19:13
  • дауш значит неможите
    15 сентября 2015 г. 15:51
  • avrudoi, ваш вопрос звучит примерно так:

    "Нашёл инструкцию от паровоза, хочу завести легковой автомобиль. Скажите, куда засыпать уголь?"

    -----

    Какую реальную задачу вы решаете? Опишите её, мы вам посоветуем, что и как делать. Перевод огрызка никчёмного кода с одного языка на другой - это не задача.


    • Изменено Petalvik 16 сентября 2015 г. 10:58
    16 сентября 2015 г. 10:58
  •   //s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); 
    
                int port=0; string server=""; IPAddress address; IPHostEntry hostEntry = Dns.GetHostEntry(server);
    
                address = hostEntry.AddressList[0];
                IPEndPoint ipe = new IPEndPoint(address, port);
                Socket s = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

    Ну а дальше сами. 
    16 сентября 2015 г. 15:52
  • НЕ ПРОВЕРЯЛ НО МНЕ КАЖИТЬСЯ ЧТО ОТВЕТ ЕСТЬ ТАК КАК ЕСТЬ ОБОЗНАЧЕНИЕ ТИПА ПАКЕТА, ПОСЛЕДНИЙ ВОПРОС ЗАРАНИЕ ЕСТЬ ЛИ ВОЗМОЖНОСТЬ поставить обозначение пакета SYN или другова. Извените за капс нехотелось переписывать.
    23 сентября 2015 г. 15:20
  • Ещё раз спрашиваю: какую реальную задачу вы решаете?

    Я без труда нашёл источник вашего кода: книга IPv6 Network Programming. Что вы хотите сделать на основе этого кода? Что вы хотите сделать с помощью сокетов?

    В языке C# и платформе .NET есть богатые возможности для работы с сетью. Например, класс System.Net.Sockets.Socket. Используйте его и не нужно будет переводить код с одного языка на другой. Есть класс System.Net.WebClient - с его помощью можно легко загружать любые данные (строки, файлы и пр.) из интернета, а также загружать их туда.

    Повторяю вопрос ещё раз: какую реальную задачу решаете? Опишите её и мы вам скажем, какие классы взять, что именно сделать.

    > Есть ли возможность поставить пакет SYN

    В языках C#/C/C++ не используется понятие "пакет".

    > или другова

    Какого именно? Для какой цели?? КАКУЮ ЗАДАЧУ РЕШАЕТЕ??? Ну, поставьте зелёненький.

    23 сентября 2015 г. 18:32
  • НЕ ПРОВЕРЯЛ НО МНЕ КАЖИТЬСЯ ЧТО ОТВЕТ ЕСТЬ ТАК КАК ЕСТЬ ОБОЗНАЧЕНИЕ ТИПА ПАКЕТА, ПОСЛЕДНИЙ ВОПРОС ЗАРАНИЕ ЕСТЬ ЛИ ВОЗМОЖНОСТЬ поставить обозначение пакета SYN или другова. Извените за капс нехотелось переписывать.

    Если вам нужно работать с RAW-data, то стоит рассмотреть такой вариант: PcapDotNet/Pcap.Net

    А для написания низкоуровневых утилит надо использовать C.

    Могу еще порекомендовать посмотреть исходники примеров: The Windows Network Programming .NET Sample Completed Project

    24 сентября 2015 г. 3:25
  • Ну вот, мой ответ кто-то удалил... Первый раз за 2 года :( Объясните причину! Правил не нарушал...

    Вопрос снят, ответ восстановлен.

    24 сентября 2015 г. 13:22