Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 48
1

Ошибка в коде программы взаимодействия клиента и сервера без установления логического соединения (UDP)

24.05.2016, 12:44. Просмотров 572. Ответов 1
Метки нет (Все метки)

Задание:
Осуществить взаимодействие клиента и сервера без установления логического соединения (UDP). Реализовать параллельное соединение с использованием многопоточности. Вводится текст. Вывести на экран предложение, содержащее максимальное количество знаков пунктуации.

Программа писалась в C++ Builder 6

сервер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <winsock2.h>
#include <windows.h>
#include <process.h>    /* _beginthread, _endthread */
#include <string.h>
#include<stdio.h>
 
//Функция, обслуживающая запросы клиентов
void ServClients(void* s){
    //Буфер для получения/отправки данных
    char res[1024];
 
    sockaddr_in ad;
    ad.sin_family = AF_INET;
    ad.sin_port = htons(1280);  
    ad.sin_addr.s_addr = htonl(INADDR_ANY);
 
    int j=sizeof(ad);
    //Связывание сокета с локальным адресом
    int c=bind((SOCKET)s,(LPSOCKADDR)&ad, j);
    //Если получены какие-то данные, то обработаем их
    if (recvfrom((SOCKET)s,(LPSTR)&res,sizeof(res),0,(LPSOCKADDR) &ad, &j)!=0)
    {
        char * pch;
        int max=0,found=0;
        char sent[1024];
        pch = strtok (res,".!?");
        while (pch != NULL)
        {
            found=0;
            for(int i=0;i<strlen(pch);i++)
                if(pch[i]==',' || pch[i]=='-' || pch[i]==':')
                    found++;
            if(found>max) { strcpy(sent,pch); max=found; }
            pch = strtok (NULL,".!?");
        }
        if(max==0)
            sprintf(sent,"All sentences skipped!");
        sendto((SOCKET)s,sent,sizeof(sent),0,(LPSOCKADDR) &ad, j);
    }
}
 
 
//Главная функция программы
int main(){
 
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(2,2);
    //Инициализация библиотеки WinSock
    err = WSAStartup(wVersionRequested, &wsaData); 
    if(err != 0) return -1;
    //Создание сокета UDP
    SOCKET s = socket(AF_INET, SOCK_DGRAM,0);
    printf("***  UDP-server started...***\n");
    while(true){
        
        _beginthread(ServClients,0,(void*)s);
    
    }
    WSACleanup();
    return 0;
}
клиент
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <winsock2.h>
#include <iostream.h>
#include<stdio.h>
 
//Главная функция программы
int main(int argc, char* argv[])
{
    char buff[1024];
    printf("UDP CLIENT\n");
    //Вывод сообщения об использовании программы,
    //если некорректно заданы параметры командной строки
    if(argc<2)
    {
        printf("Usage: client.exe server_ip\n");
        printf("Type 'break' for exit and disconnect");
        return -1;
    }
 
    //Инициализация библиотеки WinSock
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(2,2);
    err = WSAStartup(wVersionRequested, &wsaData); 
    if(err != 0) return -1;
    
    struct sockaddr_in peer;
    peer.sin_family=AF_INET;
    peer.sin_port=htons(1280);
    peer.sin_addr.s_addr=inet_addr(argv[1]);
    //Создание сокета UDP
    SOCKET s=socket(AF_INET,SOCK_DGRAM,0);
    int t=sizeof(peer);
    //Ввод пользователем текста
    cout<<"Enter the text: " << endl;
    //fflush(stdout);
    gets(buff);
    //Отправка введенного текста серверу
    sendto(s,(LPCSTR)&buff,sizeof(buff),0,(LPSOCKADDR)&peer,t);
    //Если от сервера был получен ответ, то проанализируем его
    if (recvfrom(s,buff,sizeof(buff),0,(LPSOCKADDR)&peer,&t)!=0)
    {
        //Печать результата обработки текста
        cout << buff << endl;
        closesocket(s);
    }   
    //Очистка структур WinSock
    WSACleanup();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2016, 12:44
Ответы с готовыми решениями:

Создание последовательного сервера без установления логического соединения (UDP)
Сервер #pragma comment (lib, &quot;wsock32.lib&quot;) #include &lt;winsock2.h&gt; #include &lt;iostream&gt;...

Необходимо реализовать последовательный сервер без установления логического соединения (UDP)
Клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки –...

Ошибка в коде взаимодействия клиента и сервера на основе протокола TCP/IP (ошибка в коде)
Задание: Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать...

Реализация простейшего почтового сервера и протокола взаимодействия с ним (ошибка в коде)
Задание: Реализовать простейший почтовый сервер и протокол взаимодействия с ним. Предусмотреть...

1
0 / 0 / 0
Регистрация: 12.11.2015
Сообщений: 48
02.06.2016, 09:57  [ТС] 2
апп
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2016, 09:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Асинхронные сокеты: организация взаимодействия сервера и клиента
Добрый день. У меня стоит следующая задача: клиент шлет запрос серверу и сервер начинает слать...

Создание последовательного сервера с установлением логического соединения (TCP/IP)
Не могу понять, в чем проблема. Выдает какой-то бред Сервер: #include &lt;WinSock2.h&gt; #include...

Взаимодействие клиента и сервера UDP
Хочу чтобы была взаимная передача строк между клиентом и сервером. Добился односторонней передачи. ...

Сервер получает файлы от клиента, склеивает все полученные файлы в один большой. Протокол взаимодействия UDP
Дали задание, надеюсь на вашу помощь или быть может есть какие-то исходники, буду рад любой помощи....

Осуществить взаимодействие клиента и сервера на основе протокола UDP
6. Осуществить взаимодействие клиента и сервера на основе протокола UDP. Функционирование клиента и...

Осуществить взаимодействие клиента и сервера на основе протокола UDP
Есть код Серверная часть #include &lt;iostream&gt; #include &lt;winsock2.h&gt; #pragma comment (lib,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.