[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Glazz
    В Visual C++ и вправду нет byte, так что извиняюсь. Из того что есть я бы использовал unsigned __int8. А структуру можно передавать в функцию так же как и число, строчку и тп. Написал тут пример:
    Code:
    #include <iostream>
    
    using namespace std;
    
    struct ip 
    {
    	unsigned __int8 ip1,ip2,ip3,ip4;
    };
    
    void foo(ip & tmp) // & означает передачу по ссылке
    {
    	tmp.ip1 = 1;
    	tmp.ip2 = 2;
    	tmp.ip3 = 3;
    	tmp.ip4 = 4;
    }
    
    void show_ip(ip cur)
    {
    	cout << (int)cur.ip1 << "." << (int)cur.ip2 << "." << (int)cur.ip3 << "." << (int)cur.ip4;
    }
    
    int main()
    {
    	ip my;
    	foo(my);
    	show_ip(my);
    	cin.get();
    	return 0;
    }
    
     
    #2481 jawbreaker, 8 Mar 2009
    Last edited: 8 Mar 2009
  2. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    я юзаю Dev-Cpp.
    а если я допустим хочу заполнять sockaddr_in ?
    addr.sin_addr.s_addr=inet_addr(IP);
     
  3. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Структура in_addr содержит поле s_addr. Этому полю можно присвоить 32х битное значение IP адреса. Для перевода адреса в целое число из строкового представления можно воспользоваться функцией inet_addr, которой в качестве аргумента передается указатель на строку содержащую IP адрес в виде четырех десятичных чисел разделенных точками. Можно, также, воспользоваться одной из следующих констант:

    INADDR_ANY
    все адреса локального хоста (0.0.0.0);
    INADDR_LOOPBACK
    адрес loopback интерфейса (127.0.0.1);
    INADDR_BROADCAST
    широковещательный адрес (255.255.255.255).
    Так должно работать:
    Code:
    unsigned long adr1;
    adr1=inet_addr("124.23.45.67");
    
     
    2 people like this.
  4. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    А вот мне допустим нужно прогнать весь мой сегмент через inet_add(); ( допустим он 10.0.0.128 - 255). Это же нужно тогда как то инкрементировать ип :\ ну т.е. чтоб был inet_addr("10.0.0.130") .... inet_addr("10.0.0.145"); ... не писать же вручную так все ипы + они могут быть разными.
     
  5. Tcl70

    Tcl70 Elder - Старейшина

    Joined:
    2 May 2006
    Messages:
    44
    Likes Received:
    5
    Reputations:
    -1
    Просьба написать статью как Создать кейлоггер, что надо знать где начинать
     
  6. jawbreaker

    jawbreaker Elder - Старейшина

    Joined:
    7 Jul 2008
    Messages:
    156
    Likes Received:
    76
    Reputations:
    3
    Glazz
    я бы завёл 4 числа и прибавлял как тебе нужно:
    Code:
    char buf[20];
    int a, b, c, d;
    sprintf(buf, "%d.%d.%d.%d", a, b, c, d);
    
    собственно в buf и содержится ip адрес
     
  7. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    храни адреса в инте, а чтоб пройтись по диапазону можно так
    Code:
    int ip = 2130706433; //127.0.0.1
    for(i = 0; i < 100; i++)
      sin.sin_addr.s_addr = htonl(ip + i); 
    
    на каждом шаге цикла ты будешь получать инкрементированый адрес от 127.0.0.1 до 127.0.0.100
    если хочешь прибавлять во второй октет то сдвинь i на 1 байт в лево (i <= 1;) и так далее
     
  8. t4Nk

    t4Nk Elder - Старейшина

    Joined:
    23 Sep 2007
    Messages:
    70
    Likes Received:
    33
    Reputations:
    0
    держи :D
    PHP:
    #include <stdio.h>
    #include <iostream>
    #include <fstream>

    using namespace std;

    int main() {
        
    char fname[] = "abc.txt";
        const 
    char delim[] = ",";
        
    char buff[100];
        
        
    fstream in;
        
        
    in.open(fnamefstream::in);
        
        if (!
    in.is_open()) {
            
    cerr << "Unable to open file " << fname << endl;
            return 
    0;
        }
        
        
    char tmp;
        
    char val;
        
    double an;
        
        while(
    in.getline(buffsizeof(buff))) {
            
    tmp strtok(buffdelim);
            while (
    tmp != NULL) {
                
    tmp strtok(NULLdelim);
                if (!
    tmp) break;
                if (
    strcmp(tmp"A") == 0) {
                    
    val strtok(NULLdelim);
                    if (
    valatof(val);
                } else if (
    strcmp(tmp"N") == 0) {
                    
    val strtok(NULLdelim);
                    if (
    valatof(val);
                    
    tmp NULL;
                }
            }
            
    printf("A: %.4f, N: %.4f\n"an);
        }
        
        
    in.close();
        
        return 
    0;
    }
    текущие значения ширины и долготы хранятся в переменных a и n. Добавление в массив уже прикрутишь сам, там ничего сложного :D
     
    1 person likes this.
  9. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    Идея интерсная. А такой вид ип адреса ты получил из
    int ip = inet_addr("127.0.0.1") ; ?

    Похоже не из inet_addr();
     
    #2489 Glazz, 9 Mar 2009
    Last edited: 9 Mar 2009
  10. Glazz

    Glazz Elder - Старейшина

    Joined:
    9 Aug 2008
    Messages:
    116
    Likes Received:
    7
    Reputations:
    0
    спасибо , буду пробовать писать на этом.
    Хочу попробовать написать мини сканер фтп в сегменте + запись всех результатов в MySQL/MSSQL/PostgreeSQL и вывод всех онлайн/оффлайн на сайте через php.
     
  11. Alexus

    Alexus Elder - Старейшина

    Joined:
    5 Oct 2006
    Messages:
    9
    Likes Received:
    17
    Reputations:
    -2
    Возникла проблема с сокетами для GNU/Linux , тоесть BSD Sokets
    Получилось написать сервер который принимает сообщение и выводит его на экран и соответственно клиент который отправляет это сообщение. Но не получается сделать так, чтобы сервер отправлял ответ например "ОК" и клиент его принимал и выводил на экран.

    Раньше подобное писал на перле , всё было легко и понятно по примерам из inutit.ru perl 5
     
  12. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Код в студию. Так сложно, тебе что то сказать.
     
  13. Alexus

    Alexus Elder - Старейшина

    Joined:
    5 Oct 2006
    Messages:
    9
    Likes Received:
    17
    Reputations:
    -2
    Пример клиент-сервер на вики , я делаю через TCP , http://ru.wikipedia.org/wiki/Сокеты_Беркли.

    Много где смотрел, нигде не увидел отправку ответа на запрос, на вики в том числе
     
  14. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    На сервере после recv добаввь send а на клиенте наобарот после send, recv.
     
  15. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    [Linker Error] undefined reference to `socket@12'

    что может значить эта ошибка?

    код:
    PHP:
    #include <winsock2.h>
    int main(void)
    {
        
    int s;
        
    socketAF_INETSOCK_STREAM);
        return 
    0;
    }
    по всей видимости нет какой-то библиотеки - кто может подсказать, какой?
    компилятор MingW из wxDev-C++
     
    #2495 imajo.ati, 10 Mar 2009
    Last edited: 10 Mar 2009
  16. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    2imajo.ati
    ws2_32.lib
     
    1 person likes this.
  17. +voron+

    +voron+ Elder - Старейшина

    Joined:
    6 Nov 2007
    Messages:
    30
    Likes Received:
    2
    Reputations:
    -2
    Code:
    program rand;
     var x : integer;
     begin
     randomize;
     x:=random(15);
     writeln ('x=',x);
     end.
    
    Дадад нубство, напишите pls как это будет выглядит на C++ тока без изврата)))
     
  18. .ATK

    .ATK Active Member

    Joined:
    20 Feb 2009
    Messages:
    143
    Likes Received:
    111
    Reputations:
    9
    вот!!
     
  19. +voron+

    +voron+ Elder - Старейшина

    Joined:
    6 Nov 2007
    Messages:
    30
    Likes Received:
    2
    Reputations:
    -2
    danke ^^
     
  20. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Как определить жив ли поток ?Если имеется его хендл и айди.
     
Thread Status:
Not open for further replies.