// пример простого UDP-клиента // для передачи имени файла и подсчитываемого символа #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #pragma comment(lib,"Ws2_32.lib") #define PORT 666 #define SERVERADDR "217.71.139.71" int main(int argc, char* argv[]) { setlocale(LC_ALL, "Russian"); char buff[1014]; char servaddr[80] = { 0 }; char bytes[3] = { 0 }; int n, len; printf("UDP DEMO Client\nType quit to quit\nВведите имя файла и искомый в нем символ\n"); // Шаг 1 - иницилизация библиотеки Winsocks if (WSAStartup(0x202, (WSADATA *)&buff[0])) { printf("WSAStartup error: %d\n", WSAGetLastError()); return -1; } // Шаг 2 - открытие сокета SOCKET my_sock = socket(AF_INET, SOCK_DGRAM, 0); if (my_sock == INVALID_SOCKET) { printf("socket() error: %d\n", WSAGetLastError()); WSACleanup(); return -1; } // Шаг 3 - обмен сообщений с сервером HOSTENT *hst; sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(PORT); if (argc > 1) strcpy(servaddr, argv[1]); else strcpy(servaddr, SERVERADDR); // определение IP-адреса узла if (inet_addr(servaddr) != INADDR_NONE) dest_addr.sin_addr.s_addr = inet_addr(servaddr); else { if (hst = gethostbyname(servaddr)) dest_addr.sin_addr.s_addr = ((unsigned long **)hst->h_addr_list)[0][0]; else { printf("Unknown host: %d\n", WSAGetLastError()); closesocket(my_sock); WSACleanup(); return -1; } } printf("Send data to %s\n",servaddr); while (1) { printf("\nS<=C:"); // чтение введенного сообщения в buff fgets(&buff[0], sizeof(buff) - 1, stdin); // проверка на quit if (!strcmp(&buff[0], "quit\n")) break; len = strlen(buff); // Передача датаграмы - имени файла и символа n = sendto(my_sock, buff, len, 0, \ (sockaddr *)&dest_addr, sizeof(dest_addr)); printf("Sent %d bytes\n", n); // структура sockaddr_in и ее размер sockaddr_in server_addr; int dest_addr_size = sizeof(dest_addr); // Прием датаграмы ZeroMemory(buff, sizeof(buff)); n = recvfrom(my_sock, &buff[0], sizeof(buff) - 1, 0, \ (sockaddr *)&dest_addr, &(dest_addr_size)); printf("Get %d bytes from server\n", n); if (n == SOCKET_ERROR) { printf("recvfrom() error: %d\n", WSAGetLastError()); closesocket(my_sock); WSACleanup(); return -1; } buff[n-1] = 0; // Вывод принятого с сервера сообщения на экран printf("\nS=>C:%s", &buff[0]); } // end while // Шаг последний - выход closesocket(my_sock); WSACleanup(); return 0; }