Новичок
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.1.2017
Репутация: нет Всего: нет
|
не работает поиск в структуре, а именно функция strcmp() (строка 43 server.cpp). или может быть проблема в клиентской части? не могу понять. server.cpp Код | #include <stdio.h> #include <iostream> #include <cstring> #include <WinSock2.h> #pragma comment(lib,"Ws2_32.lib") using namespace std; HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreatingFlags, LPWORD lpThreadId ); struct Bus { char number[20]; char type[35]; char price[20]; char dest[35]; } em[5];
DWORD WINAPI ThreadFunc(LPVOID client_socket) { SOCKET s2 = ((SOCKET *) client_socket)[0]; char buf[100]; while(true) { for(int i=0; i<=5; i++) { buf[0] = '\0'; strcat(buf, em[i].number); strcat(buf, " "); strcat(buf, em[i].type); strcat(buf, " "); strcat(buf, em[i].price); strcat(buf, " "); strcat(buf, em[i].dest); strcat(buf, " "); send(s2, buf, sizeof(buf), 0); } recv(s2, buf, sizeof(buf), 0); buf[0] = '\0'; for(int i = 0; i<=5; i++) { if(strcmp(buf, em[i].dest) == 0) { buf[0] = '\0'; strcat(buf, em[i].number); strcat(buf, " "); strcat(buf, em[i].type); strcat(buf, " "); strcat(buf, em[i].price); strcat(buf, " "); strcat(buf, em[i].dest); strcat(buf, " "); } send(s2, buf, sizeof(buf), 0); } } closesocket(s2); return 0; }
int numcl = 0; void print() {
if (numcl) printf("%d client connected\n", numcl);
else printf("No clients connected\n"); }
void main() { setlocale(LC_ALL, "rus"); strcpy(em[1].number, "1010 "); strcpy(em[1].type, "Ural "); strcpy(em[1].price, "$150 "); strcpy(em[1].dest, "Moscow ");
strcpy(em[2].number, "2020 "); strcpy(em[2].type, "Kamaz "); strcpy(em[2].price, "$200 "); strcpy(em[2].dest, "Kazan ");
strcpy(em[3].number, "3030 "); strcpy(em[3].type, "Toyota "); strcpy(em[3].price, "$250 "); strcpy(em[3].dest, "Omsk ");
strcpy(em[4].number, "4040 "); strcpy(em[4].type, "Honda "); strcpy(em[4].price, "$300 "); strcpy(em[4].dest, "Kirov ");
strcpy(em[5].number, "5050 "); strcpy(em[5].type, "Mercedes "); strcpy(em[5].price, "$400 "); strcpy(em[5].dest, "Krasnodar ");
WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } SOCKET s = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in local_addr; local_addr.sin_family = AF_INET; local_addr.sin_port = htons(1280); local_addr.sin_addr.s_addr = 0; bind(s, (sockaddr *)&local_addr, sizeof(local_addr)); int c = listen(s, 5); cout << "Server receive ready" << endl; cout << endl; // извлекаем сообщение из очереди SOCKET client_socket; // сокет для клиента sockaddr_in client_addr; // адрес клиента(заполняется системой) int client_addr_size = sizeof(client_addr); // цикл извлечения запросов на подключение из очереди while ((client_socket = accept(s, (sockaddr *)&client_addr, &client_addr_size))) { numcl++; print(); // Вызов нового потока для обслуживания клиента DWORD thID; CreateThread(NULL, NULL, ThreadFunc, &client_socket, NULL, &thID); } } //VOID ExitThread(DWORD dwExitCode);
|
client.cpp Код | #include <stdio.h> #include <iostream> #include <WinSock2.h> #pragma comment(lib,"Ws2_32.lib") using namespace std;
void main() { setlocale(LC_ALL, "rus"); DWORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if(err != 0) {return;}
while(true) { SOCKET s = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(1280); dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(s, (sockaddr *) &dest_addr, sizeof(dest_addr)); char buf[100];
system("cls"); cout << endl; cout << " № |Тип автобуса | Цена билета | Пункт назначения |" << endl; cout << "====|=============|=============|==========================|" << endl; for(int i=0; i<=5; i++) { recv(s, buf, sizeof(buf), 0); cout << buf << endl; } cout << endl;
cout << "Введите пункт назначения или 0 для выхода: "; cin >> buf; if (!strcmp(buf, "0")) break; send(s, buf, sizeof(buf), 0);
cout << "Рейс до '" << buf << "'" << endl; for(int i=0; i<=5; i++) { recv(s, buf, sizeof(buf), 0); cout << buf << endl; } system("pause"); closesocket(s); } WSACleanup(); }
|
Это сообщение отредактировал(а) lev93 - 22.1.2017, 15:50
|