Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Если пропадёт сеть можно ли улучшить работу? / 10 сообщений из 10, страница 1 из 1
20.11.2015, 11:35
    #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
20.11.2015, 12:14
    #39108801
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если пропадёт сеть можно ли улучшить работу?
roma1975,
это у тебя сервер, так что все, что ты можешь сделать, это при разрыве грамотно освободить все ресурсы, и ждать новое подключение.
...
Рейтинг: 0 / 0
20.11.2015, 12:19
    #39108816
roma1975
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если пропадёт сеть можно ли улучшить работу?
Да сервер. Ну так и эта программа будет работать при пропадании и возобновлении сети или нет? Или может уже не будет принимать данные?
...
Рейтинг: 0 / 0
20.11.2015, 12:24
    #39108826
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если пропадёт сеть можно ли улучшить работу?
roma1975,

ей особенно нечего с этим делать.
конкретно эта вроде зависнит в busy loop.
...
Рейтинг: 0 / 0
20.11.2015, 12:25
    #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
20.11.2015, 12:38
    #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
20.11.2015, 12:39
    #39108859
roma1975
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если пропадёт сеть можно ли улучшить работу?
Вот отредактировал ещё, так куда, что вставить -то ?
...
Рейтинг: 0 / 0
20.11.2015, 12:44
    #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
20.11.2015, 12:53
    #39108894
roma1975
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если пропадёт сеть можно ли улучшить работу?
Сделал. Что ещё тут можно сделать?
...
Рейтинг: 0 / 0
20.11.2015, 18:18
    #39109369
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если пропадёт сеть можно ли улучшить работу?
roma1975Сделал. Что ещё тут можно сделать?
Вопрос неверно ставишь. Ты должен сам задать некую финишную черту при которой
дальнейшие доработки уже не улучшают надёжность схемы клиент-сервер
а превносят огромный фактор complexity и усложняют код.

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


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