условие задания: клиент водит с клавиатуры слово серверу, а сервер получив слово обрабатывает его и передает назад клиенту строку "Yes" если слово является палиндромом, и "No" если слово не является палиндромом.
проблема в том что сервер всегда возвращает 0, то есть "No", даже если строка является палиндромом. прошу помощи
server.cpp
| Код | #include <iostream> #include <stdio.h> #include <winsock2.h> using namespace std; #define PORT 1024 // порт сервера
#pragma comment (lib, "ws2_32.lib")
int main() { setlocale(LC_ALL, "rus"); char buff[10*1014]; char res[100], *Res; // подключение библиотеки if (WSAStartup(0x202, (WSADATA *) &buff[0])) { return -1;}
// создание сокета SOCKET my_sock; my_sock = socket(AF_INET, SOCK_DGRAM,0); if (my_sock == INVALID_SOCKET) { return -1; }
// связывание сокета с локальным адресом sockaddr_in local_addr; local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = 0; local_addr.sin_port = htons(PORT); if (bind(my_sock,(sockaddr *) &local_addr, sizeof(local_addr))) { return -1; }
// обработка пакетов, присланных клиентами while(1) { sockaddr_in client_addr; int client_addr_size = sizeof(client_addr); int bsize = recvfrom(my_sock, &buff[0], sizeof(buff)-1, 0, (sockaddr *) &client_addr, &client_addr_size); if (bsize == SOCKET_ERROR) cout << "recvfrom() error: " << WSAGetLastError() << endl;
// добавление завершающего нуля buff[bsize] = 0; int result; int left_index = 0; int right_index = strlen(buff) - 1; while( left_index < right_index ) { if( buff[left_index++] != buff[right_index--]) result = 0; else result = 1; } // Вывод на экран cout << "Client->" << result << endl; _itoa_s(result, res, 10); Res = new char[strlen(res) + 1]; strcpy(Res, res); Res[strlen(res)] = '\0';
// посылка датаграммы клиенту sendto(my_sock, Res, bsize, 0, (sockaddr *)&client_addr, sizeof(client_addr)); } return 0; }
|
client.cpp
| Код | #include <winsock2.h> #include <stdlib.h> #include <iostream> #include <winsock2.h> #include <stdlib.h> #include <iostream> #include <stdio.h> #include <string.h> #include <windows.h> using namespace std; #define PORT 1024 #define SERVERADDR "127.0.0.1"
#pragma comment (lib, "ws2_32.lib")
int main() { setlocale(LC_ALL, "rus"); char buff[10*1014]; cout << "Введите '0' для выхода" << endl;
//иницилизация библиотеки Winsocks if (WSAStartup(0x202,(WSADATA *)&buff[0])) { return -1; }
// открытие сокета SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0); if (my_sock==INVALID_SOCKET) { return -1; }
// обмен сообщений с сервером HOSTENT *hst; sockaddr_in dest_addr;
dest_addr.sin_family=AF_INET; dest_addr.sin_port=htons(PORT);
// определение IP-адреса узла if (inet_addr(SERVERADDR)) dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR); else if (hst = gethostbyname(SERVERADDR)) dest_addr.sin_addr.s_addr = ((unsigned long **) hst->h_addr_list)[0][0]; else { return -1; }
while(1) { // чтение сообщения с клавиатуры cout << endl << "Client-> "; fgets(&buff[0], sizeof(buff)-1, stdin); if (!strcmp(&buff[0], "0\n")) break;
// Передача сообщений на сервер sendto(my_sock, &buff[0], strlen(&buff[0]), 0, (sockaddr *) &dest_addr,sizeof(dest_addr));
// Прием сообщения с сервера sockaddr_in server_addr; int server_addr_size = sizeof(server_addr); int n = recvfrom(my_sock, &buff[0], sizeof(buff)-1, 0, (sockaddr *) &server_addr, &server_addr_size);
if (n == SOCKET_ERROR) { return -1; }
buff[n] = 0;
cout << "Server->"; if (strcmp(buff, "1") == 0) cout << "yes" << endl; if (strcmp(buff, "0") == 0) cout << "no" << endl;
cout << endl; }
// шаг последний - выход closesocket(my_sock); WSACleanup(); return 0; }
|
|