2awdrg Ну, почитай хоть тут: http://cs.baylor.edu/~donahoo/practical/CSockets/practical/ Гугли по фразе "work with sockets in c++" и подобным.
Думаю, что для начала тебе нужно будет разобраться с HTTP-протоколом. Научиться Netcat'ом посылать запросы и получать ответы...
Здраствуйте. Вот тут решил с WinSock попробовать. В Си я не силен. Вышел вот такой код : ... char buff[1000]; printf("Program start.\n"); WSADATA WsaData; WSAStartup (MAKEWORD(2,2), &WsaData); SOCKET s; s = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN dest_addr; dest_addr.sin_family=AF_INET; dest_addr.sin_port=htons(PORT); dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR); int r = connect(s,(SOCKADDR_IN *) &dest_addr,sizeof(dest_addr)); if(r < 0) printf("Failed.\n"); .... При компилировании выдает: [Warning] passing arg 2 of `connect' from incompatible pointer type (указывает на int r = connect(..) Пробовал struct sockaddr_in dest_addr; connect(.., (sockaddr_in *)..., ..); , но всяко эта ошибка вылазит :{ использую Dev-Cpp под WinXp
Вот самый простой генератор, проще некуда (почти =) ) //icq generator by awdrg Code: #include <iostream> const int maximum = 9; //max icq pass + '\0' using namespace std; void generate(unsigned int start, unsigned int end, char pass[]); main() { char pass[maximum] = "\0"; unsigned int x=0,y=0; cout << "Enter start range: "; cin >> x; cout << "Enter final number: "; cin >> y; cout << "Enter pass: "; cin >> pass; if ((x>y or x==y)) { cout << "Error "; return 0; } generate(x,y,pass); cout << "Created " << (x-y) << " numbers\n"; return 0; } void generate(unsigned int start, unsigned int end, char pass[]) { for (;start < end;start++) cout << start-1 << ";" << pass << "\n"; } если будет сильно нужно, вывод в txt доделай сам
таак , попробовал пустую структуру sockaddr передать в коннект , скомпилилось и написало Done , тока вот как правильно заполнить структуру не нашел :\ не подскажите как? и на sockaddr получаются те же программы , что и на sockaddr_in или же в первом соккаддр нет того , что позволит полноценно работать с сетью?
В структуре sockaddr только две переменные,sa_family и sa_data.Конечно можешь с этой структурой работать но с ней намного тяжелее чем со структурой sockaddr_in именно поэтому последняя из них и была создана. Так что работать ты можешь нормально с sockaddr_in но когда будешь передавать функциям нужно "конвертировать" на sockaddr. Например : (struct sockaddr*)&addr;
А может я чего не подключил? из за этого и пишет типо неизвестный тип данных #include <stdio.h> #include <string.h> #include <winsock2.h> #include <windows.h>
ээ , это так : struct sockaddr_in addr; ... .. (struct sockaddr*)&addr ? поробовал так - все компилится , запускаю программу - проходит вроде без ошибок. Смотрю лог подключений Apach'а , там нету записи о том , что я подлкючался. Или чтоб была запись нужно хоть что-то отправить? я тока подключаюсь и все.
Ты на виндовс как я думаю ? Так вот TCP клиент : Code: #include <windows.h> #include <winsock2.h> #include <stdio.h> #define REMOTE_ADDR "127.0.0.1" #define DEF_HTTP_PORT 80 int main(void) { WSADATA wsd; struct sockaddr_in addr; if( WSAStartup( MAKEWORD(2,2),&wsd ) == 0) { puts("WIndows socket interface is loaded"); addr.sin_addr.s_addr = inet_addr(REMOTE_ADDR); addr.sin_family = AF_INET; addr.sin_port = htons(DEF_HTTP_PORT); SOCKET lsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if( lsocket != -1 ) { unsigned int addrLen = sizeof(addr); if( connect(lsocket,(SOCKADDR*)addr,addrLen ) == 0 ) { puts("Connected to server\n"); } else { printf("Error : %d\n", WSAGetLastError()); } } else { puts("Could not create socket"); } } else { puts("Could not load windows socket interface"); } } Если что не тестировал,сразу написал в редакторе сообщении на этом форуме
connect(); в проверке не так проверял на подключилось/не подключилось. Оказалось , что connect(...) == -1 Вот код , можете сказать ошибки? : #include <stdio.h> #include <string.h> #include <winsock2.h> #include <windows.h> #define PORT 80 #define SERVERADDR "127.0.0.1" int main() { const char* buff_send = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n"; WSADATA WsaData; WSAStartup (MAKEWORD(2,2), &WsaData); SOCKET s; s = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN dest_addr; dest_addr.sin_family=AF_INET; dest_addr.sin_port=htons(PORT); dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR); printf("socket - %i",s); int r = connect(s,(struct sockaddr *)&dest_addr,sizeof(dest_addr)); if(r < 0) printf("Connect FAILED\n"); int send_byte = send(s, (char* ) & buff_send, sizeof(buff_send), 0 ); printf("%i\n",send_byte); closesocket(s); WSACleanup(); return 0; }
WSAStartup(..); вообще не включается. if(WSAStartup(MAKEWORD(2,2), &WsaData)) printf("WSAStartup ok\n"); а как провильно проверить норм выполнилась WSAStartup() или нет? if(WSAStartup()) успешно или if(WSAStartup() < 0) не успшено Может кто дать описание четвертого аргумента для send(); ? Вроде как все подлкючается , отправляю заголовки на апач , и r = send() , и r = 4 , хотя хаголовки больше 4 символов должны отправиться. В логах апача снова нету соеденений :\
Поробовал отправить на фтп сервер такой запрос: const char* buff_send = "USER 1\r\nPASS 123456\r\n"; Снова получилось , что отправилось 4байта. В ответ пришел ОТВЕТ!!! 421 вы не заллгинились и т.д. и Read byte= 34. Сейчас проблема - почему передает 4 байта???
Когда ты делаешь так: Code: const char* buff_send = "USER 1\r\nPASS 123456\r\n"; ты создаешь 1 символ buff_send типа char (в винде вроде 4 байта и есть) Чтобы передавало целую строку, нужно создать массив: Code: const char buff_send[64] = "USER 1\r\nPASS 123456\r\n"; и все отлично передается