Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в структуре, клиент-серверное приложение 
:(
    Опции темы
lev93
Дата 22.1.2017, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
xvr
Дата 23.1.2017, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



А что вы расчитываете найти в пустой строке? (см строку 40 сервера)

PM MAIL   Вверх
lev93
Дата 23.1.2017, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.1.2017

Репутация: нет
Всего: нет



это исправил) в чем проблема? поиск все равно не работает. 
PM MAIL   Вверх
xvr
Дата 23.1.2017, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Во первых у вас есть запись за границами массива en. У него индексы могут быть в диапазоне 0-4. А вы пишете и читаете из 5го элемента
Во вторых у вас поля dest с хвостовыми пробелами, а конструкция cin >> buf пробелы обрежет.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1179 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.