Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438

Создать клиент, принимающий данные с использованием сокетов

12.06.2015, 12:01. Показов 1239. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, пожалуйста подскажите как мне сделать КЛИЕНТ на c++, чтобы можно было передавать и получать данные(просто строки). Слово "клиент" я выделил по тому, что сервер у меня уже сделан на delphi (так как там всё легко и просто с сокетами ), а вот c++ мне потребовался из-за cuda toolkit, который я не смог переделать с c++ на delphi.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.06.2015, 12:01
Ответы с готовыми решениями:

Приложения клиент, сервер с использованием сокетов
Запускаю одновременно оба приложения. В клиентское ввожу "localhost", нажимаю "установить соединение". Сокет в серверном создаётся...

Простой клиент-сервер с использованием сырых сокетов
Здравствуйте! Уже целую неделю бьюсь над вопросом "Как создать простой клиент-сервер с использованием сырых сокетов (raw sockets)?"...

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

8
1 / 1 / 0
Регистрация: 31.07.2014
Сообщений: 55
18.07.2015, 23:13
alex-rudenkiy, Не профессионал, но делал клиент с помощью сокетов винды. Все достаточно просто. Если интересует код, могу скинуть чуть позже. Пока могу посоветовать рыть в сторону WinSock
0
 Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
20.07.2015, 11:18  [ТС]
Цитата Сообщение от Alex_The_King Посмотреть сообщение
alex-rudenkiy, Не профессионал, но делал клиент с помощью сокетов винды. Все достаточно просто. Если интересует код, могу скинуть чуть позже. Пока могу посоветовать рыть в сторону WinSock
Хорошо, спасибо за совет. Сорсы не помешали бы
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
20.07.2015, 12:53
Easy Socket library

This library supplies some functions to bind and connect socket, and to read and write variables of all simple types and strings. It's written in C, but there is also an interface for PHP3.
1
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
20.07.2015, 16:29
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Вот набросал самый простой способ.
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <winsock2.h>
#include <string.h>
#include <stdio.h>
#ifdef _MSC_VER
#pragma comment(lib, "ws2_32.lib")
#endif
#define BUFSIZE   512
 
 
class tcp_client {
private:
    SOCKET sock;
    HANDLE thd;
    BOOL   loop;
    void   (*pfn)(char*, int);
public:
    tcp_client(void):sock(INVALID_SOCKET), 
                     thd(NULL),
                     loop(TRUE), 
                     pfn(NULL) {}
    ~tcp_client(){
        this->close();
    }
    tcp_client(const tcp_client&);
    tcp_client& operator = (const tcp_client&);
public:
    
    int create(const char* hostname, u_short port, void (*pread)(char*, int)){
        int err;
        sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if(sock == INVALID_SOCKET)
            return WSAGetLastError();
        
        sockaddr_in addr = {0}; 
        addr.sin_family      = AF_INET;
        addr.sin_port        = htons(port);
        addr.sin_addr.s_addr = inet_addr(hostname);
 
        if(addr.sin_addr.s_addr == INADDR_NONE){
            hostent* host = gethostbyname(hostname);
            if(host == NULL) {
                err = WSAGetLastError();
                this->close();
                return err;
            }
            memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
        }
 
        err = connect(sock, (const sockaddr*)&addr, sizeof(addr));
        if(err == SOCKET_ERROR) {
            err = WSAGetLastError();
            this->close();
            return err;
        }
        
        loop = TRUE;
        pfn = pread;
        thd = CreateThread(NULL, 0, thread_wait, this, 0, NULL);
        if(thd == NULL){
            err = (int)GetLastError();
            this->close();
            return err;
        }
        return 0;
    }
 
    int write(const char* buf, int len, int flags = 0){
        int ret, num = 0;
        while(len > 0){
            ret = send(sock, buf + num, len, flags);
            if(ret == SOCKET_ERROR)
                return WSAGetLastError();
            len -= ret;
            num += ret;
        }
        return 0;
    }
    
    void close(void){
        loop = FALSE;
        if(sock != INVALID_SOCKET)
            closesocket(sock);
        sock = INVALID_SOCKET;
 
        if(thd != NULL){
            WaitForSingleObject(thd, INFINITE);
            CloseHandle(thd);
        }
        thd = NULL;
    }
 
private:
 
    static DWORD WINAPI thread_wait(LPVOID arg){
        int  ret;
        char buf[BUFSIZE];
        tcp_client* ptr = (tcp_client*)arg;
 
        while(ptr->loop){
            ret = recv(ptr->sock, buf, BUFSIZE - 1, 0);
            if(ret > 0){
                buf[ret] = '\0';
                (*ptr->pfn)(buf, ret);
            } else if(ret <= 0){
                ptr->loop = FALSE;
                break;
            }
        }
        return 0;
    }
};
 
 
//принятие данных
void onRead(char* buf, int len){
    printf("recv data: %d\n", len);
    puts(buf);
}
 
 
int main(void){
    WSADATA ws = {0};
    if(WSAStartup(MAKEWORD(2, 2), &ws) != 0)
        return 1;
 
    char host[]  = "localhost";
    u_short port = 7777;
 
    tcp_client client;
    int ret = client.create(host, port, onRead);
    if(! ret){
        
        char buf[256];
        while(1){
            printf("Enter to server: ");
            fgets(buf, sizeof(buf), stdin);
            fflush(stdin);
 
            //для выхода команда exit
            if(! strncmp(buf, "exit", 4))
                break;
    
            ret = client.write(buf, strlen(buf));
            if(ret != 0){
                fprintf(stderr, "error code: %d\n", ret);
                break;
            }
        }
        client.close();
    } else 
        fprintf(stderr, "error code: %d\n", ret);
 
    WSACleanup();
    return 0;
}
2
 Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
20.07.2015, 17:25  [ТС]
Это такой пример?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
20.07.2015, 19:07
Я бы на boost::asio написал и не заморачивался.
0
1 / 1 / 0
Регистрация: 19.05.2013
Сообщений: 23
25.07.2015, 02:34
где почитать книги и тд что бы в этом разобраться?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
25.07.2015, 02:42
Самоучитель игры на WINSOCK
Winsock Reference
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2015, 02:42
Помогаю со студенческими работами здесь

Создать на основе сокетов клиент/серверное визуальное приложение
Создать на основе сокетов клиент/серверное визуальное приложение: 1. Клиент посылает через сервер сообщение другому клиенту. 2. Чат....

Пишу клиент для HTTPS с использованием сокетов. При тесте получаю ответ 302 и непонятную строку location
Привет! Вообще пишу на яве, но вопрос явы не касается. Вопрос касается наверное больше веб программирования, но специального раздела не...

Клиент-серверное ПО на основе сокетов
В данном курсовом проекте я реализовал клиент-серверное ПО на основе сокетов используя протокол TCP, задача которого состоит в проверке...

Клиент-серверная архитектура на основе сокетов
Есть такой код клиента под андроид. Сервер написан на си++. Подключаю ноут и телефон в одну сеть. Сервер работает точто правильно, но...

mail клиент с помощью сокетов, проблемка
День добрый. Начал изучать C#, решил написать простенький клиент для отправки и получения почты с помощью сокетов. Проблема в том, что...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru