Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12

Самописная библиотека по упрощенному использованию сокетов

24.10.2011, 18:20. Показов 3066. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
создал lib(klient.a) который даёт у прощеный доступ к функции отсылки данных программа не будет работать в окне так как там есть функция принтф, но это исправимо вот пример как связаться с сервером и получить отослать от него данные
вот пример

START_WSA
klietn s("127.0.0.1",80);
s.get("hello") отсылка данных
s.give получение данных даные находятся в s.str
s.closesock() закрывает сокет ну можете не закрывать

END_WSA
Вложения
Тип файла: rar файлы.rar (1.3 Кб, 18 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2011, 18:20
Ответы с готовыми решениями:

Самописная SMPP библиотека
Есть спецификация по данному протоколу, а как использовать все эти bind_transmitter , bind_tranceiver и т.д. для написания собственной...

Денвер библиотека сокетов
не могу подключить библиотеку с сокетами на денвере. в php.ini раскомментировал строку, блиблиотку залил в Z:\usr\local\php5\ext. при...

Отличие Web сокетов от сокетов в Boost Asio
Здравствуйте, Кто нибудь может пожалуйста подсказать, есть ли различие между WebSocket и сокетами в Boost asio и если есть, то в чем...

34
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
25.10.2011, 20:54
Студворк — интернет-сервис помощи студентам
Это чё за выражение?
C++
1
n=(sock,&stroka[0],sizeof(stroka),0)
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
25.10.2011, 20:58  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
((unsigned long *)&ss.sin_addr)[0]=((unsigned long **)hst->h_addr_list)[0][0]; - а ведь есть reinterpret_cas
скажи это Крису Касперскому
Цитата Сообщение от ForEveR Посмотреть сообщение
WSAStartup(0x202,&wsa); - Опять магическое число.
это нужно для винды
Цитата Сообщение от ForEveR Посмотреть сообщение
char str[10240]; - магические числа
максимальный размер пакета 4048 но я сделал с запасом это можно
Цитата Сообщение от ForEveR Посмотреть сообщение
не klient а client.
исправить легко
Цитата Сообщение от ForEveR Посмотреть сообщение
#include "stdio.h" в коде на С++
можно через iostream
Цитата Сообщение от ForEveR Посмотреть сообщение
4.
всё тот же Крис тем более это минимальные данные для клиента
Цитата Сообщение от ForEveR Посмотреть сообщение
while((nsize=recv(s,&str[0],1239,0)) != SOCKET_ERROR) - магические числа.
почитайте про recv, 1239 это размер str без последнего байта он нужен чтоб туда 0 вставить(последний байт). и Опять крис
Цитата Сообщение от ForEveR Посмотреть сообщение
Использование printf для печати. Печать ошибок в stdout а не stderr.
ну тут виноват потому что не знал об этом

Добавлено через 45 секунд
Цитата Сообщение от kravam Посмотреть сообщение
Это чё за выражение?
n= количество считанных байт
ну почитайте Криса
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
25.10.2011, 20:59
Van111, магические числа после вашего описания магическими быть не перестают. Чтобы они перестали быть таковыми, надо завести именованные константы на каждое такое число. Имя будет нести информацию, в отличие от непонятного набора цифр.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
25.10.2011, 21:00  [ТС]
может просто документацию написать по моему коду
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
25.10.2011, 21:06
Цитата Сообщение от Van111 Посмотреть сообщение
скажи это Крису Касперскому
Может быть его код был на Си?
Цитата Сообщение от Van111 Посмотреть сообщение
это нужно для винды
В windows.h вроде бы есть макросы MAKEWORD, которые позволяют сделать это более красиво. В любом случае всегда можно объявить свою константу.
Цитата Сообщение от Van111 Посмотреть сообщение
максимальный размер пакета 4048 но я сделал с запасом это можно
Буфер и максимальный размер пакета не связаны. Вся обработка сырых пакетов происходит внутри сокетов - они для этого и сделаны. Вы думаете, что одним receive нельзя принять больше 4048 байт? Если да, то Вы ошибаетесь.
Цитата Сообщение от Van111 Посмотреть сообщение
исправить легко
Так исправляйте. Ради чего Вы просили критики, чтобы огрызаться в ответ или на самом деле улучшать библиотеку?
Цитата Сообщение от Van111 Посмотреть сообщение
можно через iostream
Нужно. Вы пишете на C++.
Цитата Сообщение от Van111 Посмотреть сообщение
всё тот же Крис тем более это минимальные данные для клиента
Крис Касперски недоученный хакер, а не программист. И его способности в грамотном программировании под большим сомнением.
Цитата Сообщение от Van111 Посмотреть сообщение
почитайте про recv, 1239 это размер str без последнего байта он нужен чтоб туда 0 вставить(последний байт). и Опять крис
Я должен читать код, а не дополнительную литературу, чтобы разобраться в том, как Ваша библиотека работает. Опять же 1239 - то Вы говорите 4048, то 1239... И опять же одним вызовом recv можно принять гораздо больше.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.10.2011, 21:16
Van111, Код С++. Используйте именованные константы. А не магические числа.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 13:08  [ТС]
Цитата Сообщение от fasked Посмотреть сообщение
Я должен читать код, а не дополнительную литературу, чтобы разобраться в том, как Ваша библиотека работает. Опять же 1239 - то Вы говорите 4048, то 1239... И опять же одним вызовом recv можно принять гораздо больше.
глупая ошибка там хотел поставить 10239

Добавлено через 48 секунд
Цитата Сообщение от fasked Посмотреть сообщение
Нужно. Вы пишете на C++.
учту и переделаю

Добавлено через 1 минуту
Цитата Сообщение от fasked Посмотреть сообщение
Может быть его код был на Си?
ну вы сами сказали что он не мастер а код на с++

Добавлено через 1 минуту
Цитата Сообщение от fasked Посмотреть сообщение
Буфер и максимальный размер пакета не связаны. Вся обработка сырых пакетов происходит внутри сокетов - они для этого и сделаны. Вы думаете, что одним receive нельзя принять больше 4048 байт? Если да, то Вы ошибаетесь.
сколько по вашему нужно предоставить размер для буфера????

Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
((unsigned long *)&ss.sin_addr)[0]=((unsigned long **)hst->h_addr_list)[0][0]; - а ведь есть reinterpret_cast.
а вот тупршу поподробней как эту строку переделать?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
26.10.2011, 13:12
Van111,
C++
1
reinterpret_cast<unsigned long*>(&ss.sin_addr)[0] = reinterpret_cast<unsigned long**>(hsst->h_addr_list)[0][0];
Синтаксический сахар конечно. Но лучше юзать такие преобразования.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 13:22  [ТС]
кто знает функцию возвращающюю размер пакета который может быть послан функцией send
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
26.10.2011, 14:03
Цитата Сообщение от Van111 Посмотреть сообщение
глупая ошибка там хотел поставить 10239
Это все равно будет магическое число. Читающему такой код человеку будет трудно понять. А Вам, как разработчику этого кода, будет неудобно в том плане, что если Вы захотите изменить размер буфера, то придется его менять в нескольких местах. Про одно из таких мест можно забыть, что в свою очередь влечет неочевидные ошибки. Поэтому:
C++
1
const size_t packet_buffer_size = 10239;
Ну или как-то так. Но явно не магическими числами.
Цитата Сообщение от Van111 Посмотреть сообщение
сколько по вашему нужно предоставить размер для буфера?
Лично я бы предоставил пользователю библиотеки выбирать размер буфера. Например, если мне надо отправлять небольшие пакеты по несколько байт (не больше 100), то оставшиеся ~10Кб буду жить просто так и никогда не использоваться. Особенно это неприятно на серверной стороне, где память может быть дорогим ресурсом. А другому разработчику может и не хватить 10Кб, он захочет иметь буфер размером побольше, а поменять это значение уже не получится.
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 14:24  [ТС]
fasked, вот фрагмент
C++
1
2
3
4
5
6
7
8
9
10
11
int size_buffer=10240;
int size_send=1024;
 
void size_buf_recv_and_send(int a,int b)
{
    size_buffer=a;
    size_send=b;
        setsockopt(s,SOL_SOCKET,,,) // вот тут дальше с параметрами не могу разобратся 
        setsockopt(s,SOL_SOCKET,,,) // выдаёт ошибку в параметрах должно быть SO_RCVBUF SO_SNDBUF  
 
}
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
26.10.2011, 14:33
Van111, к сожалению я с конкретными ошибками на windows не могу помочь почти ничем .
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 14:54  [ТС]
fasked, кстати можно вообще сделать так для всех сокетов устанавливать максимальный буфер для recv 10 мегабайт это абсалютно не портит программу это даст возможность считать любые данные а для send установит 1 килобайт и сделать такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
const   int size_buffer=1000000;
const   int size_send=1024;
void client::give(char* data)
{
int error_size,size=strlen(data);
error_size=size / size_send;
if((size - error_size*size_send)>0)
error_size++;
if((size - error_size*size_send)<0)
error_size--;
for(int i=0;i<error_size;i++)
send(s,&data[0],strlen(&str[0]),0); 
}
Добавлено через 1 минуту
и пользователю не надо печшся о том сколько там данных посылать

Добавлено через 52 секунды
а в client::client как раз добавить те две функции с которыми у меня проблема
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
26.10.2011, 15:02
Цитата Сообщение от Van111 Посмотреть сообщение
кстати можно вообще сделать так для всех сокетов устанавливать максимальный буфер для recv 10 мегабайт это абсалютно не портит программу это даст возможность считать любые данные а для send установит 1 килобайт
Это не очень красивое архитектурное решение
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
26.10.2011, 15:03  [ТС]
вот код ещё не до конца сделанный но всеровно посмотрите

Добавлено через 58 секунд
Цитата Сообщение от fasked Посмотреть сообщение
Это не очень красивое архитектурное решение
хорошо сегодня попозже изменю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2011, 15:03

Самописная функция и класс
Есть код написанный процедурным стилем. Есть самописные функции. Теперь о самом страшном для меня...об ООП Допустим, есть класс. Как туда...

Конвертация 7.7. Самописная в 8.2 ЖКХ
Добрый вечер столкнулся с таким интересным вопросом, как конвертация. Уже пробовал разными способами не получается, в общем смысл такой,...

Самописная сериализация List<>
Пишу свой сериализатор. Дохожу до свойства List&lt;ClassName&gt;. Как мне узнать что это именно List&lt;&gt; ? private void...

Самописная Extract strings
Вызывает завершение работы программы следующий проблематичный для мну код. char *Cheb21::ExtractString(int pos1,int pos2,char buff) ...

Самописная конфигурация. Преобразование переменной
Здравствуйте. У меня в конфиграции имеется документ СчетФактураПродажа. В нем табличная часть с полем НалоговаяСтавка Тип - число. ...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru