Аватар для alex-rudenkiy
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438

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

12.06.2015, 12:01. Показов 1197. Ответов 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 / 3204 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru