powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Если пропадёт сеть можно ли улучшить работу?
10 сообщений из 10, страница 1 из 1
Если пропадёт сеть можно ли улучшить работу?
    #39108720
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Есть работающая нормально процедура программы. Можно ли улучшить её работу если пропадёт сеть и возобновиться, ну то есть, чтобы эта процедура после пропадания и возобновления работы сети, дальше могла принимать нормально данные. Как это сделать в данном случае?

Код: plaintext
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.
void servsocketw(void)
{

                    int sock, listener,i1,sock1,n, clilen;
		    struct sockaddr_in addr, cli_addr;
		    char buf2[1024];
		    int bytes_read;
		    int mx = 0;
		    listener = socket(AF_INET, SOCK_STREAM, 0);
		    if(listener < 0)
		    {
		        perror("socket");
		        exit(1);
		    }
		    addr.sin_family = AF_INET;
		    addr.sin_port = htons(atoi(portchwial));
		    addr.sin_addr.s_addr = inet_addr(serverchten);
		    while (1)
		   	    	    {
		   	    	    	sleep(4);
		   	    	    if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
		   	    	    {
		   	    	        perror("bind");

		   	    	    }
		   	    	    else
		   	    	    break;
		   	    	    }
		    listen(listener, 5);
		    while(1)
		    {
		    clilen = sizeof(cli_addr);
		    sock = accept(listener, (struct sockaddr *)&cli_addr, &clilen);
                    if(sock < 0)
		        {
		            perror("accept");
		            exit(3);
		        }
                     i1=0;
                     int rc,totalcnt,flagoshib,flagpervogchten;
                     while(1)
	                      	                	{
                                       strcpy(buf_lin2w,"");
	                   		sleep(1);
	                                rc = recv(sock, &buf_lin2w, BufferLength,0 );
	                                if (rc>0)
	                                {
	                                printf("%s\n","Строка получена");
	            	                printf("%s%s\n",", Stroka poluch - ",buf_lin2w);
	            	                 obrabwialon(buf_lin2w, sock);

	            	               if ((buf_lin2w[0]=='#')&&(buf_lin2w[1]=='D')&&(buf_lin2w[2]=='#'))
                                       break;
	                                }
	                               	}
	            	close(sock);
        	            }
} 
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108801
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975,
это у тебя сервер, так что все, что ты можешь сделать, это при разрыве грамотно освободить все ресурсы, и ждать новое подключение.
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108816
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да сервер. Ну так и эта программа будет работать при пропадании и возобновлении сети или нет? Или может уже не будет принимать данные?
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108826
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975,

ей особенно нечего с этим делать.
конкретно эта вроде зависнит в busy loop.
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108829
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот код зациклится при обрыве или окончании соединения, т.к. ты его не проверяешь. Допиши выход из цикла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
 if (rc>0) {
...
} else {
  // Соединение завершено
  break;
}



Для повторного ожидания - повторно запускай servsocketw() или зацикли вызов
Код: plaintext
1.
while(true) servsocketw();



PS форматируй код по-человечески. Чобы читаемо было. Отступы делают чтобы видеть что-куда вложено, а не для того чтобы код по центру экрана оказывался :)
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108856
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
void servsocketw(void)
{

                    int sock, listener,i1,sock1,n, clilen;
		    struct sockaddr_in addr, cli_addr;
		    char buf2[1024];
		    int bytes_read;
		    int mx = 0;
		    listener = socket(AF_INET, SOCK_STREAM, 0);
		      if(listener < 0)
		      {
		        perror("socket");
		        exit(1);
		      }
		    addr.sin_family = AF_INET;
		    addr.sin_port = htons(atoi(portchwial));
		    addr.sin_addr.s_addr = inet_addr(serverchten);
		                   while (1)
		   	    	    {
		   	    	    	sleep(4);
		   	    	        if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
		   	    	        {
		   	    	        perror("bind");
		   	    	        }
		   	    	       else
		   	    	       break;
		   	    	    }
		    listen(listener, 5);
		    while(1)
		    {
		       clilen = sizeof(cli_addr);
		       sock = accept(listener, (struct sockaddr *)&cli_addr, &clilen);
                        if(sock < 0)
		        {
		            perror("accept");
		            exit(3);
		        }
                        i1=0;
                        int rc,totalcnt,flagoshib,flagpervogchten;
                                       while(1)
	                            	{
                                          strcpy(buf_lin2w,"");
	                   		  sleep(1);
	                                  rc = recv(sock, &buf_lin2w, BufferLength,0 );
	                                   if (rc>0)
	                                   {
	                                   printf("%s\n","Строка получена");
	            	                   printf("%s%s\n",", Stroka poluch - ",buf_lin2w);
	            	                   obrabwialon(buf_lin2w, sock);
	            	                   if ((buf_lin2w[0]=='#')&&(buf_lin2w[1]=='D')&&(buf_lin2w[2]=='#'))
                                           break;
	                                   }
	                               	}
	            	close(sock);
        	     }
}
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108859
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот отредактировал ещё, так куда, что вставить -то ?
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108872
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975Вот отредактировал ещё, так куда, что вставить -то ?
это
Код: plaintext
1.
2.
3.
	                                  rc = recv(sock, &buf_lin2w, BufferLength,0 );
	                                   if (rc>0)
	                                   {


замени на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	                                  rc = recv(sock, &buf_lin2w, BufferLength,0 );
	                                   if (rc<=0)
	                                   {
	                                       break; // Соединение завершено
	                                   }
	                                   else
	                                   {



И выкинь
Код: plaintext
1.
	                   		  sleep(1);


Я так понимаю ты его воткнул чтобы проц не грузился на 100% когда у тебя прога зациклилась
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39108894
roma1975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал. Что ещё тут можно сделать?
...
Рейтинг: 0 / 0
Если пропадёт сеть можно ли улучшить работу?
    #39109369
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roma1975Сделал. Что ещё тут можно сделать?
Вопрос неверно ставишь. Ты должен сам задать некую финишную черту при которой
дальнейшие доработки уже не улучшают надёжность схемы клиент-сервер
а превносят огромный фактор complexity и усложняют код.

Где твоя финишная черта?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Если пропадёт сеть можно ли улучшить работу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]