С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 14.12.2014
Сообщений: 17

Реализация клиент-серверного взаимодействия

17.04.2016, 21:04. Показов 1342. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Нужна помощь, необходимо написать клиент-сервер, в котором реализовать следующие возможности:
1) при подключении клиент вводит доменное имя и номер порта
(необходима произвольная или заданная количество клиентов)
2) он посылает сообщение на сервер, в котором указывает свое имя и произвольное число
3) сервер принимает сообщение и проверяет данное числа поступивших и определяет максимальное, найдя посылает сообщение всем что n-клиент имеет наибольшее число
4), если клиент ввел число 0 тогда сервер посылает всем клиентам сообщение о том что n-клиент разорвал соединение

я так понял чтобы работать с множеством клиентов нужно использовать потоки, но я не понимаю как, кто то может дописать?? Пожалуйста!!)

Вот мои достижения, все что смог произвести.....

CLIENT

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
 
#pragma warning(disable : 4996)
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "mswsock.lib")
 
void main(void) {
    char PCName[30], ServerName[30], NAME_USER[12], addr_ip[16] = { 127.001 };
    WSAData WSADat; 
    sockaddr_in sin; // адреса сокета
    SOCKET Sock; //сокет клієнта
 
                 // ІР адреса
    printf("Enter server's IP: ");
    scanf_s("%15s", addr_ip, 16);
 
    WSAStartup(0x0202, &WSADat); // ініціалізація WinSock
                                 // 0x0202 - версія WinSock. 
                                
    gethostname(PCName, 30); // отримати імя компютера
 
    sin.sin_family = AF_INET; 
    sin.sin_addr.s_addr = inet_addr(addr_ip); // IP сервера 
    sin.sin_port = htons(27015); // порт сервера
 
    Sock = socket(AF_INET, SOCK_STREAM, 0); // створення сокета
 
                                            // ***** підключ. до серверу
    printf("Connecting to server...\n");
 
    if (connect(Sock, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR) {
        printf("Connection error!\n");
        goto End;
    }
    send(Sock, PCName, strlen(PCName) + 1, 0); // імя компютера посилаю на сервер
    recv(Sock, ServerName, 30, 0); // отримую імя компютера сервера
 
    printf("Connected to "%s"!\n", ServerName);
 
    //  Меню
    int MAIN_MENU;
    do {
        printf("1. Send message;\n");
        printf("2. Get Message;\n");
        printf("3. Quit;\n");
 
        printf("Make your selection: ");
        scanf_s("%i", &MAIN_MENU);
 
        switch (MAIN_MENU) {
        case 1:
            // Запит на сервер
            printf("Enter message: ");
            scanf_s("%199s", NAME_USER, 12);
            if (send(Sock, NAME_USER, strlen(NAME_USER) + 1, 0) != SOCKET_ERROR) printf("Sent!\n");
            else printf("Error of sending!\n");
            break;
        case 2:
            // Отримати запит від сервера
            if (recv(Sock, NAME_USER, 12, 0) != SOCKET_ERROR) {
                printf("%s\n", NAME_USER);
                _gettch();
            }
            else printf("Error of getting!\n");
            break;
        };
 
        printf("\n");
    } while (MAIN_MENU != 3);
 
End:
    //закриття сокетів
    closesocket(Sock);
    WSACleanup();
    _gettch();
}
SERVER

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
64
65
66
67
68
69
70
71
72
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
 
#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "mswsock.lib")
 
void main(void) {
    char PCName[30], ClientName[30], NAME_USER[15];
    WSAData WSADat; 
    sockaddr_in sin;
    SOCKET Sock, Client;
 
    WSAStartup(0x0202, &WSADat); 
 
 
    gethostname(PCName, 30);
 
    sin.sin_family = AF_INET; 
    sin.sin_addr.s_addr = 0;  
    sin.sin_port = htons(27015); 
    Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // ствер. сокета
    bind(Sock, (sockaddr*)&sin, sizeof(sin)); // сокет звязується з сокетом по адресі sin                                            
    printf("Wait of client...\n");
 
    listen(Sock, SOMAXCONN); //сокет прослуховується сервером
    Client = accept(Sock, (sockaddr*)&sin, 0); // очікування клієнта
    recv(Client, ClientName, 30, 0); // Імя ПК_ клієнта
    send(Client, PCName, strlen(PCName) + 1, 0); // Відправка імені ПК сервера
 
    printf("Client ( "%s" ) has connected!\n", ClientName);
 
    // ***** Меню
    int MAIN_MENU;
    do {
        printf("1. Send message;\n");
        printf("2. Get Message;\n");
        printf("3. Quit;\n");
 
        printf("Make your selection: ");
        scanf_s("%i", &MAIN_MENU);
 
        switch (MAIN_MENU) {
        case 1:
            // відправка повідомлення клієнту
            printf("Enter message: ");
            scanf_s("%199s", NAME_USER, 15);
            if (send(Client, NAME_USER, strlen(NAME_USER) + 1, 0) != SOCKET_ERROR)printf("Sent!\n");
            else printf("Error of sending!\n");
            break;
        case 2:
            // прийом повідомлення від клієнта
            if (recv(Client, NAME_USER, 15, 0) != SOCKET_ERROR) {
                printf("%s\n", NAME_USER);
                _gettch();
            }
            else printf("Error of getting!\n");
            break;
        };
 
        printf("\n");
    } while (MAIN_MENU != 3);
 
    //закриття сокетів
    closesocket(Sock);
    closesocket(Client);
    WSACleanup();
    _gettch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2016, 21:04
Ответы с готовыми решениями:

Подводные камни клиент-серверного приложения
Здравствуйте дорогие Хорошую статью дал мне Vitaly1981 http://citforum.ru/book/cook/winsock.shtml за что большое спасибо! Помогите...

Создание dll библиотеки для клиент-серверного приложения
Всем форумчанам привет. Стала задача создать dll для клиент-серверного приложения. Дело в том, что эта библиотека будет использоваться как...

Разработка клиент-серверного приложения для удаленной обработки изображений
Разработка клиент-серверного приложения для удаленной обработки изображений. Может у кого есть примеры исходников?

2
0 / 0 / 1
Регистрация: 14.12.2014
Сообщений: 17
17.04.2016, 21:08  [ТС]
Если не видно вот DOC с кодом
Вложения
Тип файла: docx MY_SERVER.docx (21.2 Кб, 3 просмотров)
0
22 / 22 / 10
Регистрация: 19.03.2015
Сообщений: 137
17.04.2016, 21:51
Цитата Сообщение от Nigilus Посмотреть сообщение
я так понял чтобы работать с множеством клиентов нужно использовать потоки, но я не понимаю как
Раз
Два
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2016, 21:51
Помогаю со студенческими работами здесь

Реализация чата Клиент - Клиент (сокеты)
Разобрался с созданием сокетов: инициализация, создание(ну или не разобрался =(( ). Не понял суть функции accept и установку соединения. ...

C++ реализация «клиент-сервер»
Здравствуйте, есть задание: клиент посылает серверу координаты прямоугольной областии точки в декартовой системе координат. Сервер...

Реализация клиент-серверного взаимодействия на C#
Кто может поделится ссылкой на пример приложения на C#, 1-клиент(делает запросы в БД получает ответ в виде datatable, находится в...

Разработайте программного бота, работающего но принципу клиент-серверного взаимодействия
Доброе утро! Помогите, пожалуйста с задачей. Будет здорово, если всё будет написано без усложнений. Разработайте программного бота,...

Создание клиент-серверного приложения с применением межпроцессного взаимодействия на основе проекций файлов
Написать с применением межпроцессного взаимодействия на основе проекций файлов два консольных приложения: серверное и клиентское. ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru