Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ FTP-клиент Доброго времени суток. Сам я начинающий программист, только учусь, но вот настала острая нужда работать с сетью, а именно необходимо написать FTP клиент, способный просматривать директории сервера,... но тот как exe работает, а исходные коды исключительно не компилируются. Если у вас не компилируются примеры из стандартной поставки Qt, то видимо что-то не так с рабочим окружением: (1) не... https://www.cyberforum.ru/ cpp-networks/ thread1202558.html C++ Recv заполнить буфер целиком https://www.cyberforum.ru/ cpp-networks/ thread1202802.html
Добрый день. Понадобилось написать небольшой сервер, который принимает данные от клиента, сравнивает их со своими и если они не совпадают, отправляет клиенту свои данные. Решил использовать функцию... В голову пришло вот такое: int readCount = 0, disp = 0; while (disp < 100) { n = recv(sc, buf+disp, 100-disp, 0); if (n == -1) break; disp += n; }
C++ Ошибка с преобразованием параметра для передачи по сокету Доброго времени суток, уважаемые. Играюсь с сокетами. Зашел в тупик. Ругается на преобразование. #include <sys/socket.h> #include <arpa/inet.h> //HOST TO NAME port number #include <iostream>... char messg = "a"; Поменяй на char messg = "a"; https://www.cyberforum.ru/ cpp-networks/ thread1205085.html C++ Может ли быть сервер как клиент? Вопрос запутанный какой-то в названии )) А вообще, вот более развёрнуто: Вот есть у меня игра, там 10 слотов под игроков(т.е. клиентов), Обязательно человеку, который "создал сервер" быть клиентом... BeginerMan, Вы можете реализовать, например, выполнение сервера в одном потоке, а клиента - в другом потоке одного приложения; при этом будет необязательно реализовывать связь между ними через... https://www.cyberforum.ru/ cpp-networks/ thread1204217.html
C++ Не отправляет сообщение клиентам https://www.cyberforum.ru/ cpp-networks/ thread1199440.html
Пишу сетевой чат на С++ Есть клиент-сервер (сокет-сервер), при получении сообщения он отправляет данное сообщение клиенту, который его послал, а остальные подключенные клиенты его не получают, хотя... потому что TCP. может сообщение слишком длинное, а ты вычитываешь от него только 256 байт.
Разработать программу, рассчитывающую возможное количество адресов в сети по заданному IP-адресу и маске C++
Задача: разработать программу, рассчитывающую возможное количество адресов в сети по заданному IP-адресу и маске. на С++
C++ Параллельный TCP сервер linux Попробовал реализовать параллельный TCP сервер с созданием потоков по запросам. Все компилируется, запускается, но сообщения не передаются. Подскажите в каких местах я накосячил. Писал под CentOS,... vxg, клиент писался на скорую руку, вот и не заметил что использую разные функции для чтения отправки, изменю попробую. https://www.cyberforum.ru/ cpp-networks/ thread1202994.html C++ Через что отправить данные в сеть? Всем привет, хотелось бы узнать способы отправки своих пакетов(не UDP и TCP) в сеть, без серверов под винду... сейчас использую WINPCAP, но к сожалению он не хочет работать под XE5 :( подскажите... В случае совсем своего формата датаграмм - через raw socket. Гугл в помощь. https://www.cyberforum.ru/ cpp-networks/ thread1206710.html
C++ Dns клиент Builder6 C++ Помогите пожалуйста. Я уже пятый день над этим сижу. Я написал программу которая посылает днс запрос на сервер, а он говорит что формат не правильный. Делал в соответствии с RFC 1035. void... https://www.cyberforum.ru/ cpp-networks/ thread1206476.html C++ Передача слова на русском языке Winsock
не могу передать слово, написанное на русском языке, выводится кракозябра :( Где код???
C++ Не пишутся принятые данные в файл Доброго дня. Столкнулся с такой проблемой: Передаю строковые данные от клиента серверу, данные принимаются сервером, но в файл не пишутся. Сброс принудительный на диск сделал. Привожу... https://www.cyberforum.ru/ cpp-networks/ thread1206276.html C++ Передача сообщения через интернет https://www.cyberforum.ru/ cpp-networks/ thread1202300.html
Доброго времени суток. Подскажите пожалуйста, возможно сохранить некоторую информацию в сети Интернет с одного компьютера (программно) так, чтоб потом можно было получить к ней доступ с другого. Без... бесплатные ФТП, клиент-сервер... как хотите...
 Аватар для tymrfik
2 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 89
13.06.2014, 21:06  [ТС] 0

Сокет сервера для нескольких клиентов без потоков? - C++ - Ответ 6314481

13.06.2014, 21:06. Показов 1405. Ответов 10
Метки (Все метки)

Ответ

Вывод recvfrom пока не выполнял. После множества модификаций, получился вот этот код. Но он все равно не показывает подключился ли клиент и какой у него ip/
вначале как и в клиенте представлены заголовки icmp, ip пакетов, а дальше уже реализация сокета сервера. (для более быстрого знакомства с кодом)
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include <signal.h>
#include <io.h>
 
#pragma comment(lib, "Ws2_32.lib")
 
#include <winsock2.h>
#include <windows.h>
 
using namespace std;
 
int nclients =0; //ñ÷åò÷èê êëèåíòîâ
struct icmp_header 
{
unsigned char type; // òèï ICMP- ïàêåòà
unsigned char code; // êîä ICMP- ïàêåòà 
unsigned short crc ; // êîíòðîëüíàÿ ñóììà 
unsigned long orig_timestamp; // äîïîëíèòåëüíûå ïîëÿ 
unsigned long recv_timestamp; // óòî÷íÿþùèé òèï
unsigned long trns_timestamp; //ICMP-ïàêåòà
};
struct ip_header
{
unsigned char version; // íîìåð âåðñèè ïðîòîêîëà 
unsigned char tos; // òèï ñåðâèñà 
unsigned short length; // îáùàÿ äëèíà ïàêåòà 
unsigned short id ; // èäåíòèôèêàòîð ïàêåòà
unsigned short flags; // ôëàãè 
unsigned char ttl ; // Âðåìÿ æèçíè ïàêåòà 
unsigned char proto; // Ïðîòîêîë âåðõíåãî óðîâíÿ 
unsigned short crc; // CRC çàãîëîâêà 
unsigned int src_addr; // IP- àäðåñ îòïðàâèòåëÿ 
unsigned int dst_addr; // IP- àäðåñ ïîëó÷àòåëÿ 
}; 
//ïîäñ÷åò êîíòðëüíîé ñóììû
unsigned short rs_crc (unsigned short * buffer, int length)
{ 
unsigned long crc = 0;
// Âû÷èñëåíèå CRC 
while (length > 1)
 { 
 crc += *buffer++; 
 length -= sizeof (unsigned short); 
 } 
if (length) crc += *(unsigned char*) buffer;
// Çàêîí÷èòü âû÷èñëåíèÿ 
crc = (crc >> 16) + (crc & 0xffff);
crc += (crc >> 16);
//Ñìåùåíèå CRC , åñëè íåîáõîäèìî
if (1) crc = crc << 1; 
// Âîçâðàùàåì èíâåðòèðîâàííîå çíà÷åíèå 
return (unsigned short)(~crc); 
} 
 
int main(int argc, char *argv[])
{
    struct ip_header iph;
    struct icmp_header icmph;
    icmph.type = 8; // òèï ICMP- ïàêåòà
    icmph.code= 0; // êîä ICMP- ïàêåòà 
    icmph.crc=0; // êîíòðîëüíàÿ ñóììà 
    icmph.orig_timestamp; // äîïîëíèòåëüíûå ïîëÿ 
    icmph.recv_timestamp; // óòî÷íÿþùèé òèï
    icmph.trns_timestamp; //ICMP-ïàêåòà
    iph.version=0x4; // íîìåð âåðñèè ïðîòîêîëà 
   iph.tos= 0; // òèï ñåðâèñà (íîðìàëüíûé)
   iph.length= 10; // îáùàÿ äëèíà ïàêåòà 
   iph.id= htonl(54321) ; // èäåíòèôèêàòîð ïàêåòà
   iph.flags= htons(0); // ôëàãè 
   iph.ttl=255 ; // Âðåìÿ æèçíè ïàêåòà 
   iph.proto = IPPROTO_ICMP; // Ïðîòîêîë âåðõíåãî óðîâíÿ 
   iph.crc=0; // CRC çàãîëîâêà 
  SOCKET s, s_new, client_socket[30], sd;// nieaou aey na?aa?a
   int max_clients=30;
    //Eieoeaeecaoey aeaeeioaee WinSock
    WSADATA wsaData;
        int errcod;
        errcod = WSAStartup(MAKEWORD(2, 2), &wsaData);
            if(errcod!=0)
            {
             cout<<"WinSock not found!";
             return 0;
            }
    //set of socket descriptors
    fd_set readfds;
    //initialise all client_socket[] to 0 so not checked
    for (int i = 0; i < max_clients; i++)
    {
        client_socket[i] = 0;
    }
    
    s = socket (AF_INET,SOCK_RAW, IPPROTO_ICMP);
    if(s == INVALID_SOCKET)
    {
        cout<<"Error create socket";
    }
    else cout<<"Create socket succesfull";
    
    int opt = TRUE;
    if( setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt)) < 0 )
    {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
    struct sockaddr_in server, client_addr;
    memset ((char *)&server, '\0', sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr("192.168.1.107");
    server.sin_port = 0;
    bind (s, (struct sockaddr*)&server, sizeof(server));
    listen (s, 3);
    //one soidinie proxodit
  int addrlen = sizeof(server);
  cout<<"Waiting";
  while(TRUE)
    {
        //clear the socket set
        FD_ZERO(&readfds);
  
        //add master socket to set
        FD_SET(s, &readfds);
        int max_sd = s;
         
        //add child sockets to set
        for ( int i = 0 ; i < max_clients ; i++)
        {
            //socket descriptor
            sd = client_socket[i];
             
            //if valid socket descriptor then add to read list
            if(sd > 0)
                FD_SET( sd , &readfds);
             
            //highest file descriptor number, need it for the select function
            if(sd > max_sd)
                max_sd = sd;
        }
  
        //wait for an activity on one of the sockets , timeout is NULL , so wait indefinitely
        int activity = select( max_sd + 1 , &readfds , NULL , NULL , NULL);
    
        if ((activity < 0) && (errno!=EINTR))
        {
            cout<<"select error";
        }
        if (FD_ISSET(s, &readfds))
        {
            if ((s_new = accept(s, (struct sockaddr *)&server, &addrlen))<0)
            {
                perror("accept");
                exit(EXIT_FAILURE);
            }
            cout<<endl;
            cout<<"New connection , socket fd is %d , ip is : %s , port : %d \n";
            cout<< s_new;
            cout<<inet_ntoa(server.sin_addr);
            cout<<ntohs(server.sin_port);
            //add new socket to array of sockets
            for (int i = 0; i < max_clients; i++)
            {
                //if position is empty
                if( client_socket[i] == 0 )
                {
                    client_socket[i] = s_new;
                    cout<<endl;
                    cout<<"Adding to list of sockets as %d\n";
                    cout<< i;
                     
                    break;
                }
            }
        }
   //int client_addr_size = sizeof(client_addr);
   //s_new = accept(s,(sockaddr*)&client_addr, &client_addr_size); 
   /*cout<<endl;
   cout<<"Ip client   ";
   cout<<inet_ntoa(client_addr.sin_addr)<<endl;*/
    system("PAUSE");
    return EXIT_SUCCESS;
}
}


Вернуться к обсуждению:
Сокет сервера для нескольких клиентов без потоков? C++
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2014, 21:06
Готовые ответы и решения:

Как через UDP сокет соединить трёх клиентов без сервера?
Люди подскажите как через UDP сокет соединить трёх клиентов без сервера

Асинхронный сокет: подключение нескольких клиентов
Как сделать что-бы к серверу подключалось сразу несколько клиентов. Что я не так сделал? Как это исправить? class Program { ...

Общее хранилище для нескольких потоков сервера
Пишу программу, в ней появилась надобность обработки http запросов, значит нужен сервер. Сначала написал на sun.net.httpserver.HttpServer...

10
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2014, 21:06
Помогаю со студенческими работами здесь

Соединение клиентов посредством сервера без его дальнейшего участия
Вопрос не сколько в написании кода, сколько в идее/ознакомительных статьях Есть 2 клиента с серыми/частными ip и сервер, к которому есть...

Сервер с использованием пула потоков для параллельной обработки запросов клиентов
Разработать сервер с использованием пула потоков для параллельной обработки запросов клиентов. К серверу подключается много клиентов, все...

Доработать сокет клиента и сокет сервера
Есть клиент с адресом 192.168.73.2 и сервер (192.168.73.145). Необходимо с помощью низкоуровневого сокета SOCK _ RAW разработать генератор...

Параметры хостинга для сокет сервера
Мне нужно создать простой сокет-сервер для флеш чата, он должен работать всегда. Какие параметры должны быть у хостинга чтобы не появлялись...

Копирование файлов с FTP-сервера на компьютеры клиентов без замены уже имеющихся файлов
Приветствую. Такая задача. имеется фтп сервер. на нем лежит 5 папок, в каждой паке каждый день добавляются файлы. Мне необходимо, чтобы эти...

0
Новые блоги и статьи
Неблокируемый стек в C++26: реализуем простой сборщик мусора
stackOverflow 02.03.2025
Многопоточные приложения требуют надежных и производительных структур данных, способных эффективно работать в условиях конкурентного доступа. Неблокируемые структуры данных представляют собой особый. . .
Шаблон REQ/REP в ZeroMQ: сверхбыстрый обмен сообщениями в C++ и Python
stackOverflow 02.03.2025
Построение высоконагруженных распределенных систем требует надежного и производительного механизма обмена сообщениями. ZeroMQ выделяется среди прочих решений своей невероятной скоростью работы и. . .
Нестандартные приемы работы с итераторами в C++
stackOverflow 02.03.2025
Итераторы - один из краеугольных камней C++, предоставляющий универсальный механизм обхода и манипуляции данными в контейнерах. Появившись как замена небезопасным указателям, они эволюционировали от. . .
Лексический анализ и регулярные выражения в C++26
stackOverflow 02.03.2025
Лексический анализ - ядро любого компилятора и инструмента обработки текста. Каждый программист сталкивается с задачами парсинга строк, обработки файлов конфигурации или анализа пользовательского. . .
Подробно о std::mdspan в C++23
stackOverflow 02.03.2025
Работа с многомерными массивами данных традиционно была одной из сложных задач в C++. Программистам приходилось создавать собственные абстракции или использовать сторонние библиотеки для эффективной. . .
Колмогоровская сложность в C++: Путь к совершенному коду
stackOverflow 02.03.2025
Абстрактная математическая теория Колмогорова стала мощным средством оценки и улучшения программного кода. Сложность алгоритма - не только в его вычислительной эффективности, но и в том, насколько. . .
Изменения в C# 14
stackOverflow 02.03.2025
Одно из самых значимых изменений в C# 14 - поддержка коллекционных выражений, которые позволяют создавать и инициализировать коллекции с помощью нового лаконичного синтаксиса. Это нововведение. . .
Разработка кроссплатформен­­­­ного мобильного приложения для iOS/Android на C++
bytestream 02.03.2025
C++ как язык программирования высокого уровня с прямым доступом к аппаратным ресурсам позволяет создавать приложения, работающие одинаково быстро как на iOS, так и на Android устройствах. Ни для кого. . .
Аутентификация/авторизация на Golang
bytestream 02.03.2025
Go предлагает множество возможностей для создания надежных систем аутентификации. Встроенные криптографические пакеты, высокая производительность и простота параллельной обработки запросов делают его. . .
Нововведения TypeScript 5.8
bytestream 02.03.2025
TypeScript 5. 8 приносит много возможностей и оптимизаций, которые существенно расширяют границы типобезопасного программирования на JavaScript. Эта версия включает ряд значительных улучшений в работе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru