[ 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. Smapt

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

    Joined:
    29 Jan 2008
    Messages:
    31
    Likes Received:
    32
    Reputations:
    3
    вопрос был не "зачем" а "как"
     
  2. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    Извини за непонимание!!! :cool:

    епта ты не понял!!!! Обьяснить для новичка как через попу сделать конфетку можно но не нужно!!! Попа она не для этого служит!

    В Dos тоже нельзя применить неблокирующие сокеты да и незачем!!!! Надеюсь мой намек на DOS, тебе подскажет что событийная модель мастдая не для поп служит!

    ... хотя попа вот она http://www.rsdn.ru/Forum/?mid=2152432
     
    #1282 Delimiter, 7 Jul 2008
    Last edited: 7 Jul 2008
    2 people like this.
  3. P(i)n*Fl0p1

    P(i)n*Fl0p1 Elder - Старейшина

    Joined:
    19 Dec 2006
    Messages:
    157
    Likes Received:
    35
    Reputations:
    9
    Compiling...
    pbr11.cpp
    Linking...
    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
    Debug/pbr12.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.

    pbr12.exe - 2 error(s), 0 warning(s)

    MVc++6.0
    непонимаю что делать и <iostream.h> и просто <iostream> и using namespace std; и std:: пробовал ниче не помогает.
     
  4. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Что-то мне подсказывает, что у тебя функции main() в коде нет..
     
  5. P(i)n*Fl0p1

    P(i)n*Fl0p1 Elder - Старейшина

    Joined:
    19 Dec 2006
    Messages:
    157
    Likes Received:
    35
    Reputations:
    9
    :eek: :eek: :eek:
    даже на такой проге выдает ошибку))))))
    #include <iostream>
    int main()
    {
    std::cout << "hello";
    return 0;
    }

    если мэйна нет то error C2447: missing function header (old-style formal list?)
    раньше все норм компилилось,ща лагает пострашному 1.5минуты хелло ворлд компилилось..
     
    #1285 P(i)n*Fl0p1, 8 Jul 2008
    Last edited: 8 Jul 2008
  6. razzzar

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

    Joined:
    16 Jun 2007
    Messages:
    92
    Likes Received:
    75
    Reputations:
    5
    ты компилишь консольное приложение, но в настрйоках проекта поставил Win32.
    иди в настройки проекта, там Linker\System\Subsystem поставь Console
     
    1 person likes this.
  7. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    Подскажите пожалуйста как можно сделать выход из программы.
    Code:
    #include <stdio.h>
    #define MAXLINE 1000
    
    int getline(char line[], int maxline);
    void copy(char to[], char from[]);
    /*output long string*/
    
    main()
    {
    	int len;
    	int max; 
    	char line[MAXLINE];
    	char longest[MAXLINE];
    	char str;
    	
    	max = 0;
    	while((len = getline(line, MAXLINE)) > 0) {
    		if (len > max) {
    		max = len;
    		copy(longest, line);
    		}
    	}
    	if (max > 0) {
    		printf("%s", longest);
    	}
    	return 0;	
    }
    
    int getline(char s[], int lim)
    {
    	int c, i;
    	
    	for (i=0; i<lim-1 && (c=getchar()) != EOF && c!='\n'; ++i) {
    		s[i] = c;
    	}
    	if (c == '\n') {
    		s[i] = c;
    		++i;
    	}
    	s[i] = '\0';
    	return i;
    }
    
    void copy(char to[], char from[])
    {
    	int i;
    	
    	i = 0;
    	while ((to[i] = from[i]) != '\0')
    		++i;
    }
    
     
  8. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    а где именно нужен выход, после какого действия? :)
     
  9. izlesa

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

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2procedure
    тебе же всё уже рассказали. EOF = Ctrl+C в Винде и помоему Ctrl+D в Никсах
    Чтобы выйти по другой клавише, нужно вместо EOF подставить её ASCII-код, например для ESC = 0x1B (dec = 27)
    Внимательно читай K&R
     
  10. _empty

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

    Joined:
    22 Mar 2008
    Messages:
    62
    Likes Received:
    17
    Reputations:
    5
    Добавь перед main -

    PHP:
    using namespace std;
     
    2 people like this.
  11. izlesa

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

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2_empty
    ревнитель стандарта )))
    на ощибку компилятора посмотри )
     
    1 person likes this.
  12. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    В никсе - Ctrl+Z ;)
     
    2 people like this.
  13. SVAROG

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

    Joined:
    13 Feb 2007
    Messages:
    424
    Likes Received:
    86
    Reputations:
    -1
    недавно начал изучать с++, решил написать клиент -сервер, задача программы: в клиенте написать строку и что бы она выводилась на сервере.
    всё компилируеться и запускаеться но почему то не работает, подскажите где ошибся
    код сервера:
    PHP:
    #include "stdafx.h"
    #include <winsock2.h>
    #include <iostream.h>
    #pragma comment(lib,"ws2_32.lib")
     

    int main(int argccharargv[])
    {   
        
    char buff[1024];
        
    WSAStartup(0x0202,(WSADATA *) &buff[0]);
        
    SOCKET my_sock;
        
    my_sock=socket(AF_INET,SOCK_STREAM0);
        
    sockaddr_in local_addr
        
    local_addr.sin_family=AF_INET
        
    local_addr.sin_port=htons(777); 
        
    local_addr.sin_addr.s_addr=0;
        
        
    bind(my_sock,(sockaddr *) &local_addrsizeof(local_addr));
        
    listen(my_sock,0x200);
        
        
    sockaddr_in client_addr;
        
    int size_addr sizeof(client_addr);
        
    char buffer[256];
        while(
    SOCKET ozh=accept(my_sock,(sockaddr *) &client_addr, &size_addr) )
        {
         if(
    ozh<0)
         {
         break;
         
    printf("critical error\n");
         
    closesocket(ozh);
         
    closesocket(my_sock);
         }
         else
         {
         
    printf("All right");
         }
        
        
    #define sHELLO "Hello, Sailor\r\n" 
       
       
    send(ozh,sHELLO,sizeof(sHELLO),0);
       
    int i;
       
    i=recv(ozhbuff2560);
       
    cout << buff;

      
        

        }
       
       
        return 
    0;
    }


    код клиента:
    PHP:
    // my.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"
    #include <winsock2.h>
    #include <iostream.h>
    #pragma comment(lib,"ws2_32.lib")
    #define port 777
    #define SERVERADDR "127.0.0.1"

    int main(int argccharargv[])
    {   
        
    char buff[1024];
        
    WSAStartup(0x0202,(WSADATA *) &buff[0]);
        
    SOCKET my_sock;
        
    my_sock=socket(AF_INET,SOCK_STREAM0);
        
    sockaddr_in local_addr
        
    local_addr.sin_family=AF_INET
        
    local_addr.sin_port=htons(777); 
      

        
    HOSTENT *hst;
        if (
    inet_addr(SERVERADDR)!=INADDR_NONE)
             
    local_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
        else 
          if(
    gethostbyname(SERVERADDR))
              ((
    unsigned long *)&local_addr.sin_addr)[0]= ((unsigned long **)hst->h_addr_list)[0][0];
        else
        {
        
    printf("error dns resolve!");
        }
        if(
    connect(my_sock,(sockaddr *)&local_addrsizeof(local_addr)))
        {
        
    printf("connect error!\n");
        return -
    1;
        }
        
        
    printf("join to server.."SERVERADDR "->OK!\n ");     
      
    int nsize;
     
      while(
    nsize=recv(my_sock,&buff[0],sizeof(buff)-1,0)!=SOCKET_ERROR)
      {
      
    buff[nsize]=0;
      
    printf("S<=C:"); fgets(&buff[0],sizeof(buff)-1,stdin);
        if(!
    strcmp(&buff[0],"quit\n"))
        {
        
    printf("exit..");
        
    closesocket(my_sock);
        
    WSACleanup();
        return 
    0;
        }


        
    send(my_sock, &buff[0],nsize0); 
      }
        

        
       
       
        return 
    0;
    }


    компилятор visual c++ 6.0
     
  14. P-29

    P-29 New Member

    Joined:
    4 Aug 2006
    Messages:
    47
    Likes Received:
    0
    Reputations:
    0
    Помагите с компилировать етот код не получается пользуюсь dev-C++ ver 4.9.9.2
     
  15. _empty

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

    Joined:
    22 Mar 2008
    Messages:
    62
    Likes Received:
    17
    Reputations:
    5
    to P-29

    А ты в свойства проекта добавлял, чтобы он с библиотекой ws32_2 линковал?
    Если нет, то найди в каталог и добавь, а вобще нужно выкладывать текст ошибки тоже!
     
  16. P-29

    P-29 New Member

    Joined:
    4 Aug 2006
    Messages:
    47
    Likes Received:
    0
    Reputations:
    0
    А как библеотеку добавлять.
     
  17. zindi

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

    Joined:
    11 Apr 2007
    Messages:
    74
    Likes Received:
    17
    Reputations:
    0
    ну человек вы так не когда не научетесь..если не знаете как добавлять библиотеку а уже за такие дела беретесь
    #include <>
     
  18. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    :D :)
    Code:
    // шаг 5: подчищаем за собой следы
    closesocket(lsocket);
    WSACleanup();
    
    .... ах дык это так называется? :D Чистый ХЭК однако :cool:

    Code:
    // шаг 0: иницилизация библиотеки сокетов
    // в реальном shell-коде эту функцию вызывать не надо,
    // т.е. процедура иницилизации была выполена уязвимым процессорм
    if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1;
    
    в настоящем шелкоде твоего кода не нужно! :D
    во первых пишется он на ассемблере с контролем отсутствия спецсимволов (типа 0) во вторых пляшется от поиска функций кернела и загрузки винсок библиотеки... даже если она загружена. :cool: Но самое главное бинд-шеллкоды не могут сделать главного "реверс коннект", чтоб атаковать компы за NAT-ом! Отгадай процентное соотношение тех кто за NAT и с реальными IP(белыми) . Поэтому BIND-SHELL это уже история !

    P.S.
    Code:
    Сообщение от P-29
    А как библеотеку добавлять.
    
    присутствие библиотеки в коде определяется либо явной загрузкой, либо Project во вкладке Link
     
    #1298 Delimiter, 11 Jul 2008
    Last edited: 11 Jul 2008
  19. SlyBit

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

    Joined:
    4 Jul 2008
    Messages:
    49
    Likes Received:
    8
    Reputations:
    0
    P-29

    линковать:
    #pragma comment(lib, "Ws2_32.lib")

    p.s. покажи какие ошибки

    p.p.s
    Дай пожалуйста ссылку, откуда ты это взял. ;)

    SVAROG

    Где именно ошибка? Сделай проверку функций на ошибки с выводом их кодов (WSAGetLastError).
     
    #1299 SlyBit, 11 Jul 2008
    Last edited: 11 Jul 2008
  20. izlesa

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

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    2SVAROG
    Во-первых, это c-style код, несмотря на iostream
    Во-вторых ... млин ... слов нету ... за такой код надо расстреливать на месте, и не делать скидок даже на недавность порыва изучения, тк это уже не нубство, а ... я даже не знаю как назвать. Такое впечатление, что ты наискосок просмотрел мануал и забил на него. Чего стоят &buf[0] или брейки в начале ветвления проверки ошибок.

    В-третьих, после беглого просмотра этого "творения" выяснилось, что логика "несколькo" другая. Ты не понимаешь что пишешь? Разберись в логике программы, составь алгоритм на бумажке, досконально проверь его и уже тогда переноси его в код.

    Я не разбираюсь в плюсах, но помоему подключенный в stdafx.h stdio.h перекрывает iostream.h, поэтому не работает cout.
    А вообще основная ошибка в логике. Сервером ты пытаешься отправить строку, но отправляется один байт. Потом ты это количество же пытаешься отправить на сервер. Там, если бы работал cout выводился только один символ.
    Т.е. в клиенте надо изменить send так

    Code:
     send(my_sock, buff,strlen(buff), 0); // Будет посылать на сервер столько байт, сколько нужно 
    
    ЗЫ Внимательней на код посмотрел, сервер нормально отсылает это у тебя в while бардак. Ты что нибудь о приоритетности операций слышал? Или эту главу в книге пролистал? И то что выражение в while будет выполнятся справо налево ни сном ни духом. И следовательно в nsize будет заносится не кол-во полученных байт, а результат выражения != ...

    Весь код яркая иллюстрация к тому, как нельзя делать ни в коем разе. До*баться можно к каждой строке.
    Бери K&R или Прата и марш изучать язык нормально!
     
    1 person likes this.
Thread Status:
Not open for further replies.