Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ не могу разобраться с программой на С++. Метод Жордана-Гаусса могу указать в каком месте не понимаю. Очень прошу, дайте коментарии к программе. #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int colPos, rowPos; int i, j, k, razm; double max; https://www.cyberforum.ru/ cpp/ thread272048.html C++ Book
Подскажите пожалуйста книгу по чистому С без объектов и прочего, страниц на 200, что бы легко читалось и было информативно.
C++ Что такое инстанцирование? https://www.cyberforum.ru/ cpp/ thread271621.html
class A { ... }; A a; // Это уже инстанцирование A?
C++ Специализация шаблонного класа https://www.cyberforum.ru/ cpp/ thread271521.html
Каким образом можно написать специализацию шаблонного класса так, чтобы часть методов являлась специализированной, то есть писалась заново, а остальные методы - такие, какими бы они были если бы шаблонный клас был без специализации. template <int Size> class MyClass { public: int Method1(); int Method2(); }; template <>
Книга по C++, которую нельзя найти в интернете C++
мой друг поехал в москву , хочу его попрасить купить мне там книгу по с++ только такую,которую можно найти только на продаже т.е. каторая не имеет доступа на скачивание в инете.кто знает,посоветуйте буду очень благодарен.
C++ Наследование в С++. https://www.cyberforum.ru/ cpp/ thread271177.html
Создать класс CFile, инкапсулирующий в себе такие функции работы с файлами, как Open, Close, Seek, Read, Write, GetPosition и GetLength. На базе этого класса создать производный класс CMyDataFile – файл, содержащий в себе данные некоторого определенного типа MyData, а также заголовок, облегчающий доступ к этому файлу. Написать программу, демонстрирующую работу с этим классом. Программа должна...
C++ не выходит настроить С++ 2008 https://www.cyberforum.ru/ cpp/ thread271097.html
Установил студию 2008 экспресс эдишин, создаю виндовс приложение. Вначале жаловалсь что нет библиотеки msvcr90d. Нашел ее кинул в систем32 и теперь выдает такое:
C++ Помогите выловить баг, сил моих больше нету(((
Программа глючит при добавлении больших структурированных каталогов, раньше думал, что ошибка выделения памяти, оказалось нет...Очень надо помощь спеца, СРОЧНО!!! Конструктор класса CStorage::CStorage() { CoInitialize(NULL); GetTempPath(MAX_PATH,szTMP); GetShortPathName(szTMP,szTMP,MAX_PATH); lpszW = (WCHAR *)malloc(sizeof(WCHAR)); lpBuf = malloc(sizeof(char)); //MEM_TOP_DOWN
C++ mingw и лицензия Интересует следующий вопрос. Можно ли создавать ПО под лицензией, отличной от GPL (или с закрытым\частично закрытым кодом)? ПО собрано под windows, компилятор mingw (g++), библиотеки libstdc++-6.dll и libgcc_s_dw2-1.dll слинкованы статически https://www.cyberforum.ru/ cpp/ thread271048.html C++ Бесконечные циклы. https://www.cyberforum.ru/ cpp/ thread270757.html
Довольно часто допускаются ошибки приводящие к бесконечным циклам. Только что такой бесконечный цикл едва не вынудил прервать работу горячей перезагрузкой - компьютер завис почти намертво. Можно ли как нибудь оградить себя от подобных зависаний системы? ОС Ubuntu. Буду благодарен за отклики и предложения.
Уч. материалы C++
Плз кинте ссылочки/названия на книги, или еще что нибуть, по темам: с++ и сети, и с++ подключение к др программе(что то типа взаимодействия с др программами). Темы оч расплывчатые, так что кидайте что в голову придет по данным вопросам. :)
C++ Переход из арифметического представления в функциональное представление Переход из арифметического представления в функциональное представление,нужно написать на C++ Builder 6 ? Я к сожалению не знаю как это делать, а сдать нужно... Заранее спасибо! https://www.cyberforum.ru/ cpp/ thread270378.html
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
0

Баг asio? или баг TCP стека? - C++ - Ответ 1532119

08.04.2011, 14:50. Показов 10984. Ответов 5
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
всем привет.

повстречался с очень странным багом. и не могу определить кто бажит, asio, или TCP-стек.

на стороне клиента, сохраняю отправляемые массивы в файл, чтоб убедится в том, что массивы не портятся.
так и есть. массивы не искаженны:
Название: 1.png
Просмотров: 631

Размер: 3.8 Кб

на стороне сервера, так же, сохраняю принятые массивы.
но тут, массив приходит искаженным:
Название: 2.png
Просмотров: 614

Размер: 4.1 Кб

от снифф этого участка, tcpdump`ом, на стороне клиента:
Баг asio? или баг TCP стека?


а это на стороне сервера:
Название: 4.png
Просмотров: 605

Размер: 3.7 Кб



на стороне клиента, как раз в то место где данные искаженны, добавлены какие-то данные. не мои.
видно, что на стороне сервера, массив, после прочтения при помощи asio, уже испорчен. но tcpdump показывает что массив пришел целым.
я в замешательстве

еще более странно то, что если третьим аргументом клиенту передать "1" - то между асинхронными записями будет использоваться sleep() в 1мс - что полностью решает проблему. но такое решение не подходит.

выложу код в тему, в надежде, что кто-то внесет ясность в ситуацию.

клиент:
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
#include "header.hpp"
 
/***************************************************************************/
 
int main(int argc, char** argv) {
   if ( argc != 4 ) {
      std::cout << "client ip port 0/1 - sleed disabled/enabled" << std::endl;
      return 0;
   }
   std::string ip = argv[1];
   boost::uint16_t port = boost::lexical_cast<boost::uint16_t>(argv[2]);
   bool wsleep = (argv[3][0] == '1');
   std::cout << "sleep " << (wsleep?"enabled":"disabled") << std::endl;
   
   FILE* in = fopen("client_in.log", "wb");
   FILE* out= fopen("client_out.log", "wb");
   if ( !out || !in ) {
      std::cout << "can`t open file!" << std::endl;
      return 1;
   }
 
   boost::asio::ip::tcp::endpoint endpoint(
      boost::asio::ip::address::from_string(ip), port
   );
 
   boost::asio::io_service ios;
   boost::shared_ptr<boost::asio::io_service::work> work(new boost::asio::io_service::work(ios));
 
   boost::thread thread(boost::bind(&boost::asio::io_service::run, &ios));
   
   boost::asio::ip::tcp::socket socket(ios);
   socket.connect(endpoint);
 
   boost::asio::socket_base::non_blocking_io non_blocking_io(true);
   socket.io_control(non_blocking_io);
 
   client_read(socket, in);
 
   for ( size_t idx = 0; idx < 100000000; ++idx ) {
      char* buf = new char[send_buffer_size];
      sprintf(buf, "cs:%8dn", idx);
      start_write(socket, buf, out);
      if ( wsleep ) {
         boost::this_thread::sleep(boost::posix_time::microseconds(1000));
      }
   }
 
   std::cout
   << "send data to server finished!" << std::endl
   << "waiting for all ask`s from server..." << std::endl;
 
   work.reset();
 
   while ( counter ) {
      boost::this_thread::sleep(boost::posix_time::microseconds(1000));
      std::cout << "." << std::flush;
   }
 
   std::cout << std::endl << std::endl
   << "all ask`s received." << std::endl
   << "terminate client..." << std::endl;
 
   socket.cancel();
   socket.close();
 
   thread.join();
   fclose(in);
   fclose(out);
}
 
/***************************************************************************/
http://liveworkspace.org/code/... e7e08564a7

сервер:
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
#include "header.hpp"
 
/***************************************************************************/
 
int main(int argc, char** argv) {
   if ( argc != 3 ) {
      std::cout << "server ip port" << std::endl;
      return 0;
   }
   std::string ip = argv[1];
   boost::uint16_t port = boost::lexical_cast<boost::uint16_t>(argv[2]);
 
   FILE* in = fopen("server_in.log", "wb");
   FILE* out= fopen("server_out.log", "wb");
   if ( !out || !in ) {
      std::cout << "can`t open file!" << std::endl;
      return 1;
   }
 
   boost::asio::ip::tcp::endpoint endpoint(
      boost::asio::ip::address::from_string(ip), port
   );
   
   boost::asio::io_service ios;
   boost::asio::ip::tcp::acceptor acceptor(ios, endpoint);
   boost::asio::ip::tcp::socket socket(ios);
 
   acceptor.accept(socket);
   std::cout << "new connection from: " << socket.remote_endpoint().address().to_string() << std::endl;
   
   boost::asio::socket_base::non_blocking_io non_blocking_io(true);
   socket.io_control(non_blocking_io);
 
   server_read(socket, in, out);
 
   ios.run();
 
   fclose(in);
   fclose(out);
}
 
/***************************************************************************/
http://liveworkspace.org/code/... 8c46ddf9e2

общий хидер:
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
#ifndef _header_hpp_included_
#define _header_hpp_included_
 
#include <iostream>
#include <cstdio>
#include <boost/bind.hpp>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/lexical_cast.hpp>
 
enum { recv_buffer_size = 13 };
enum { send_buffer_size = 13 };
 
volatile size_t counter = 0;
 
/***************************************************************************/
 
void client_readed(
   boost::asio::ip::tcp::socket&,
   char*,
   FILE*,
   const boost::system::error_code&
);
 
void client_read(
   boost::asio::ip::tcp::socket& sock,
   FILE* out
) {
   char* buf = new char[recv_buffer_size];
   boost::asio::async_read(
      sock,
      boost::asio::buffer(buf, recv_buffer_size),
      boost::bind(
         &client_readed,
         boost::ref(sock),
         buf,
         out,
         boost::asio::placeholders::error
      )
   );
}
 
void client_readed(
   boost::asio::ip::tcp::socket& sock,
   char* buf,
   FILE* out,
   const boost::system::error_code& e
) {
   if ( e ) {
      if ( !counter ) return;
      std::cout << "read handler: " << e.message() << std::endl;
      return;
   }
 
   fwrite(buf, recv_buffer_size, 1, out);
 
   counter--;
 
#ifdef _my_debug_
   printf("client_readed(): %s", buf);
   fflush(stdout);
#endif
 
   static size_t idx = 0;
   size_t tmp = 0;
   char* p = strchr(buf, ':');
   if ( p ) {
      p++;
      sscanf(p, "%8d", &tmp);
   } else {
      throw std::runtime_error("input data error!");
   }
   
   delete[] buf;
   
   if ( idx != tmp ) {
      std::ostringstream os;
      os << "read error. expected " << idx << " get " << tmp;
      throw std::runtime_error(os.str());
   }
   idx++;
   client_read(sock, out);
}
 
/***************************************************************************/
 
void writen(
   char*,
   FILE*,
   const boost::system::error_code&
);
 
void start_write(
   boost::asio::ip::tcp::socket& sock,
   char* buf,
   FILE* out
) {
   counter++;
   boost::asio::async_write(
      sock,
      boost::asio::buffer(buf, send_buffer_size),
      boost::bind(
         &writen,
         buf,
         out,
         boost::asio::placeholders::error
      )
   );
}
 
void writen(
   char* buf,
   FILE* out,
   const boost::system::error_code& e
) {
   fwrite(buf, send_buffer_size, 1, out);
   delete[] buf;
   if ( e ) {
      std::cout << "writen(): " << e.message() << std::endl;
   }
}
 
/***************************************************************************/
 
void server_readed(
   boost::asio::ip::tcp::socket&,
   char*,
   FILE*,
   FILE*,
   const boost::system::error_code&
);
   
void server_read(
   boost::asio::ip::tcp::socket& sock,
   FILE* in,
   FILE* out
) {
   char* buf = new char[recv_buffer_size];
   boost::asio::async_read(
      sock,
      boost::asio::buffer(buf, recv_buffer_size),
      boost::bind(
         &server_readed,
         boost::ref(sock),
         buf,
         in,
         out,
         boost::asio::placeholders::error
      )
   );
}
 
void server_readed(
   boost::asio::ip::tcp::socket& sock,
   char* buf,
   FILE* in,
   FILE* out,
   const boost::system::error_code& e
) {
   if ( e ) {
      std::cout << "read handler: " << e.message() << std::endl;
      return;
   }
 
#ifdef _my_debug_
   printf("server_readed(): %s", buf);
#endif
 
   fwrite(buf, recv_buffer_size, 1, in);
   
   static const char* ptr = "sc:";
   memcpy(buf, ptr, strlen(ptr));
   start_write(sock, buf, out);
   server_read(sock, in, out);
}
 
/***************************************************************************/
 
#endif // _header_hpp_included_
http://liveworkspace.org/code/... 5074181215

всем спасибо.

зы
во вложении, архив с исходниками и Makefile`ом. проверено на gcc-linux и на mingw32.
asiotest2.zip

Вернуться к обсуждению:
Баг asio? или баг TCP стека? C++
0
Лучшие ответы (1)
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2011, 14:50
Готовые ответы и решения:

Баг или так задумано? Фишка с кодировкой файлов компиляции
Visual C++ 2013 Express. От изменения кодировки созданных .cpp файлов будет зависеть то как...

Баг или особенность?
Делаю проект на 6-м билдере и внезапно столкнулся с таким недоразумением. Со включенным build with...

XE3 баг или кривые руки?
Проблемы с указателем таблицы, дойдя до последней записи, внезапно появляется ещё десяток левых...

баг компилятора, или беда с типами данных?
привет) есть задача, где нужно проверить, равна ли сумма чисел единице... проще простого не правда...

5
08.04.2011, 14:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2011, 14:50
Помогаю со студенческими работами здесь

баг или что-то другое?
вот код: enum SexType {female, male}; struct PersonStruct { char name; int age; ...

WinAPI SetTextJustification+TextOutW. Баг или фича?
Доброго времени суток. Делаю как-то так. Положим есть текст: '111 222 333' - три слова. два...

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через...

Баг в программе. Без цикла работает нормально. С циклом выдает баг
Здравствуйте. Пишу программу. И как не пытался ее переписать, как дохожу до момента включения в код...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru