Здравствуйте, пожалуйста помогите найти ошибку в коде, которым пытаюсь получить размер файла на удалённом сервере в интернете через Winsock HTTP. Код (Text): #include "stdafx.h" #include <winsock2.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") #define SERVER "localhost" #define PORT 80 int main() { char sendbuffer[2048]; // Формируем GET-пакет: strcpy (sendbuffer, "GET http://www.kingdia.com/download/kingdia-video-converter.exe"); strcat (sendbuffer, " HTTP/1.0\r\n"); strcat (sendbuffer, "User-Agent: Opera\r\n"); strcat (sendbuffer, "Host: www.kingdia.com\r\n"); strcat (sendbuffer, "Connection: keep-alive\r\n"); strcat (sendbuffer, "\r\n\r\n"); WSADATA wsaData; SOCKET socketfd; struct sockaddr_in server_addr; struct hostent * h; char response[1024*5]; if(WSAStartup (MAKEWORD (2,2), &wsaData)) { fprintf (stderr, "\nError intializing winsock library!"); return 1; } for(int j = 1; j < 3; j++) { socketfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); if (socketfd < 0) { printf("Socket() error %d\n", GetLastError()); return -1; } server_addr.sin_family = AF_INET; server_addr.sin_port = htons (PORT); // преобразование IP адреса из символьного в сетевой формат if (inet_addr(SERVER) != INADDR_NONE) server_addr.sin_addr.S_un.S_addr = inet_addr (SERVER); else // попытка получить IP адрес по доменному имени сервера if (gethostbyname (SERVER))((unsigned long *)&server_addr.sin_addr)[0] = ((unsigned long **)h->h_addr_list)[0][0]; else { printf("Invalid address %s\n",SERVER); closesocket(socketfd); WSACleanup(); return -1; } // адрес сервера получен – пытаемся установить соединение if (connect (socketfd, (const struct sockaddr*)&server_addr, sizeof(struct sockaddr))) { printf ("Connect error %d\n", GetLastError()); return -1; } // отправка get-запроса send (socketfd, sendbuffer, strlen (sendbuffer),0); // ответ сервера recv (socketfd, &response[0], 2048, 0 ); printf ("%s\n", response); memset (&response, 0, sizeof (response)); closesocket (socketfd); if (j == 2) break; Sleep (5000); } WSACleanup (); return 0; }
Да и кстати у меня NOD32 последний со свежими базами не даёт толком отладить файл, говорит, что это мол вирус... Пппц...
net_name оффтоп: ну раз фай на сервере удален, то и получать нечего 1. вы задаете ip или dns name? 2. а зачем это ну вообще антивирусы очень дружат с WinSock и почти каждое приложение, которое его юзает почти на каждом антивирусе является вирусов.
Да не он есть По ссылке качается же... Делаю универсально и так и так можно... Понятно, а можно как нубудь замаскироваться от антивируса?
Хотя бы от НОДа чтобы у меня на компе работало? Конечно можно в исключения добавить, а так чтобы програмно можно?
это то я понял из кода, а тестирование как производите. от того что возвращается из inet_addr(SERVER) зависит ход программы. остальные if вроде бы ведут к сигналам об ошибке.