Извини за непонимание!!! епта ты не понял!!!! Обьяснить для новичка как через попу сделать конфетку можно но не нужно!!! Попа она не для этого служит! В Dos тоже нельзя применить неблокирующие сокеты да и незачем!!!! Надеюсь мой намек на DOS, тебе подскажет что событийная модель мастдая не для поп служит! ... хотя попа вот она http://www.rsdn.ru/Forum/?mid=2152432
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:: пробовал ниче не помогает.
даже на такой проге выдает ошибку)))))) #include <iostream> int main() { std::cout << "hello"; return 0; } если мэйна нет то error C2447: missing function header (old-style formal list?) раньше все норм компилилось,ща лагает пострашному 1.5минуты хелло ворлд компилилось..
ты компилишь консольное приложение, но в настрйоках проекта поставил Win32. иди в настройки проекта, там Linker\System\Subsystem поставь Console
Подскажите пожалуйста как можно сделать выход из программы. 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; }
2procedure тебе же всё уже рассказали. EOF = Ctrl+C в Винде и помоему Ctrl+D в Никсах Чтобы выйти по другой клавише, нужно вместо EOF подставить её ASCII-код, например для ESC = 0x1B (dec = 27) Внимательно читай K&R
недавно начал изучать с++, решил написать клиент -сервер, задача программы: в клиенте написать строку и что бы она выводилась на сервере. всё компилируеться и запускаеться но почему то не работает, подскажите где ошибся код сервера: PHP: #include "stdafx.h" #include <winsock2.h> #include <iostream.h> #pragma comment(lib,"ws2_32.lib") int main(int argc, char* argv[]) { char buff[1024]; WSAStartup(0x0202,(WSADATA *) &buff[0]); SOCKET my_sock; my_sock=socket(AF_INET,SOCK_STREAM, 0); 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_addr, sizeof(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(ozh, buff, 256, 0); 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 argc, char* argv[]) { char buff[1024]; WSAStartup(0x0202,(WSADATA *) &buff[0]); SOCKET my_sock; my_sock=socket(AF_INET,SOCK_STREAM, 0); 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_addr, sizeof(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],nsize, 0); } return 0; } компилятор visual c++ 6.0
to P-29 А ты в свойства проекта добавлял, чтобы он с библиотекой ws32_2 линковал? Если нет, то найди в каталог и добавь, а вобще нужно выкладывать текст ошибки тоже!
ну человек вы так не когда не научетесь..если не знаете как добавлять библиотеку а уже за такие дела беретесь #include <>
Code: // шаг 5: подчищаем за собой следы closesocket(lsocket); WSACleanup(); .... ах дык это так называется? Чистый ХЭК однако Code: // шаг 0: иницилизация библиотеки сокетов // в реальном shell-коде эту функцию вызывать не надо, // т.е. процедура иницилизации была выполена уязвимым процессорм if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1; в настоящем шелкоде твоего кода не нужно! во первых пишется он на ассемблере с контролем отсутствия спецсимволов (типа 0) во вторых пляшется от поиска функций кернела и загрузки винсок библиотеки... даже если она загружена. Но самое главное бинд-шеллкоды не могут сделать главного "реверс коннект", чтоб атаковать компы за NAT-ом! Отгадай процентное соотношение тех кто за NAT и с реальными IP(белыми) . Поэтому BIND-SHELL это уже история ! P.S. Code: Сообщение от P-29 А как библеотеку добавлять. присутствие библиотеки в коде определяется либо явной загрузкой, либо Project во вкладке Link
P-29 линковать: #pragma comment(lib, "Ws2_32.lib") p.s. покажи какие ошибки p.p.s Дай пожалуйста ссылку, откуда ты это взял. SVAROG Где именно ошибка? Сделай проверку функций на ошибки с выводом их кодов (WSAGetLastError).
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 или Прата и марш изучать язык нормально!