Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Передача файла с помощью сокетов (UDP) 
V
    Опции темы
alexuni
  Дата 18.10.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



    Всем привет! Пишу лабу по сокетам. Полностью задание звучит так: Файл передается блоками размером в 1 КБ. В   запросе   указывается   полный   путь   к файлу   и   номер   блока.   Для   поиска доступных   серверов   используется широковещательная рассылка. Тип сервера: последовательный.
    У меня возникла проблема с передачей файла блоками и заданием в запросе конкретного номера блока...
Собственно реализация... Буду рад любой помощи (желательно с кодом ))))

Код Сервера
Код

#include <stdio.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>
#pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
#pragma comment (lib, "mswsock.lib")

  #define PORT 666    // порт сервера

  int main(int argc, char* argv[])
  {
    char buff[1024];

    printf("Server start working...\n");

    //подключение библиотеки 
    if (WSAStartup(0x202,(WSADATA *) &buff[0]))
    {
      printf("WSAStartup error: %d\n",
             WSAGetLastError());
      return -1;
    }

    //создание сокета
    SOCKET my_sock;
    my_sock=socket(AF_INET,SOCK_DGRAM,0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("Socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }

    //связывание сокета с локальным адресом 
    sockaddr_in local_addr;
    local_addr.sin_family=AF_INET;
    local_addr.sin_addr.s_addr=INADDR_ANY;
    local_addr.sin_port=htons(PORT);

    if (bind(my_sock,(sockaddr *) &local_addr,
        sizeof(local_addr)))
    {
      printf("bind error: %d\n",WSAGetLastError());
      closesocket(my_sock);
      WSACleanup();
      return -1;
    }

    //обработка пакетов, присланных клиентами
    while(1)
    {
      sockaddr_in client_addr;
      int client_addr_size = sizeof(client_addr);
      int bsize=recvfrom(my_sock,&buff[0],
        sizeof(buff)-1,0,
        (sockaddr *) &client_addr, &client_addr_size);
      if (bsize==SOCKET_ERROR)
      printf("recvfrom() error: %d\n",
             WSAGetLastError());

      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst;
      hst=gethostbyaddr((char *)
            &client_addr.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",
      (hst)?hst->h_name:"Unknown host",
      inet_ntoa(client_addr.sin_addr),
      ntohs(client_addr.sin_port));

      // добавление завершающего нуля
      buff[bsize]=0;

      // Вывод на экран 
      printf("Client=>Server:%s\n",&buff[0]);

  FILE *file;
       char* file_name = buff;
    file_name[strlen(file_name) - 1] = '\0';

          file = fopen( file_name, "r" );
          if( file != 0 )
            {
     fgets( buff, sizeof(buff) , file );
            }
          else
            {
      printf("File not found !!!");
            }
     fclose(file);

      // посылка датаграммы клиенту
      sendto(my_sock,&buff[0],strlen(&buff[0]),0,
        (sockaddr *)&client_addr, sizeof(client_addr));
    }
    return 0;
  }


Код клиента:
Код

#include <stdio.h>
#include <string.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>

   #pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
   #pragma comment (lib, "mswsock.lib")

  #define PORT 666
  #define SERVERADDR "127.0.0.1"
  #define CLIENT_FILE "example.txt" //файл на клиенте

  int main(int argc, char* argv[])
  {
    char buff[10*1014];
    printf("Client stert working...\n");

    //иницилизация библиотеки Winsocks
    if (WSAStartup(0x202,(WSADATA *)&buff[0]))
    {
      printf("WSAStartup error: %d\n",
             WSAGetLastError());
      return -1;
    }

    //открытие сокета
    SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }

    //обмен сообщений с сервером
    // установка возможности широковещательного адреса
    int i = 1;
    if (setsockopt(my_sock, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == -1)
    {
  printf ("Error setting broadcast socket\n");
  WSACleanup();
  return -1;
    }
    HOSTENT *hst;
    sockaddr_in dest_addr;

    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);

    
    // определение IP-адреса узла
    if (inet_addr(SERVERADDR))
      dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    else
      if (hst=gethostbyname(SERVERADDR))
        dest_addr.sin_addr.s_addr=((unsigned long **)
              hst->h_addr_list)[0][0];
    else
      {
        printf("Unknown host: %d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }
     

    while(1)
    {
      // чтение сообщения с клавиатуры
      printf("\nClient=>Server:");fgets(&buff[0],sizeof(buff)-1,
             stdin);
      if (!strcmp(&buff[0],"quit\n")) break;

      // Передача сообщений на сервер
      sendto(my_sock,&buff[0],strlen(&buff[0]),0,
        (sockaddr *) &dest_addr,sizeof(dest_addr));

      // Прием сообщения с сервера
      sockaddr_in server_addr;
      int server_addr_size=sizeof(server_addr);

      int n=recvfrom(my_sock,&buff[0],sizeof(buff)-1,0,
        (sockaddr *) &server_addr, &server_addr_size);

      if (n==SOCKET_ERROR)
      {
        printf("recvfrom() error:"\
          "%d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }

      buff[n]=0;

      // Вывод принятого с сервера содержимого файла на экран
      printf("Client<=Server:%s",&buff[0]);

   FILE *file;
       char* file_name = CLIENT_FILE;
        file = fopen( file_name, "w" ); 
        fputs(buff, file );
        fclose( file );
    }

    //выход
    closesocket(my_sock);
    WSACleanup();

    return 0;
  }

PM MAIL   Вверх
alexuni
Дата 24.10.2009, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



Переделал и оптимизировал свою лабу: теперь файл передается блоками. Но осталась небольшая загвоздка: как задать в запросе конкретный номер блока, а на принимающей стороне правильно его интерпретировать и отыскать? smile Рассчитываю, что на данном форуме все же получу компетентную помощь...

Код клиента:
Код

#include <stdio.h>
#include <string.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>

   #pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
   #pragma comment (lib, "mswsock.lib")

  #define PORT 15150
  #define SERVERADDR "127.0.0.1"
  #define CLIENT_FILE "example.txt" //файл на клиенте
  #define Line "File is recivied"
  int p;

#define Nsize 1024
  int main(int argc, char* argv[])
  {
    char buffer[30*Nsize];
    char buff[Nsize + 1];
    printf("Client stert working...\n");

    //иницилизация библиотеки Winsocks
    WSADATA WsaData;
    if( WSAStartup(0x0202, &WsaData) )
    {
        printf("Winsock cannot be started\r\n");
        return false;
    }

    //открытие сокета
    SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }

    //обмен сообщений с сервером
    // установка возможности широковещательного адреса
    int i = 1;
    if (setsockopt(my_sock, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == -1)
    {
        printf ("Error setting broadcast socket\n");
        WSACleanup();
        return -1;
    }
    HOSTENT *hst;
    sockaddr_in dest_addr;
    memset(&dest_addr, 0, sizeof(sockaddr_in));
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);

    
    // определение IP-адреса узла
    if (inet_addr(SERVERADDR))
      dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    else
      if (hst=gethostbyname(SERVERADDR))
        dest_addr.sin_addr.s_addr=((unsigned long **)
              hst->h_addr_list)[0][0];
    else
      {
        printf("Unknown host: %d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }
     

    while(1)
    {
      // чтение сообщения с клавиатуры
      printf("\nClient=>Server:");
      scanf("%s", buff);
      //fgets(&buff[0],sizeof(buff)-1, stdin);
      if (!strcmp(buff,"quit\n")) break;

      // Передача сообщений на сервер
      sendto(my_sock, buff, strlen(buff), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));

      // Прием сообщения с сервера
      sockaddr_in server_addr;
      int server_addr_size=sizeof(server_addr);
      char* line = Line;
      p = 0;

      while(*buff!=*line)
      //do
          {
              memset(buff, 0, Nsize);
              int n=recvfrom(my_sock,&buff[0],Nsize + 1,0,
               (sockaddr *) &server_addr, &server_addr_size);

                printf("Was recieved bytes %d\n",n);
      
                if (n==SOCKET_ERROR)
                {
                   printf("recvfrom() error:"\
                   "%d\n",WSAGetLastError());
                   closesocket(my_sock);
                   WSACleanup();
                   return -1;
                }
                buff[n]=0;
                if(*buff!=*line)
                {
                for(int i=0;i<strlen(buff);i++)
                {
                  buffer[p+i] = buff[i];
                  //p += sizeof(buff);
                }
                
                p+=n;
                buffer[p]=0;
                //buffer[strlen(buff)]=0;
                //buffer[strlen(buff) - 1] = '\0';
                }
                //else buffer[p]=0;

           } 
          //while(*buff!=*line) ;

      // Вывод принятого с сервера сообщения об успешной операции на экран
      printf("Client<=Server:%s",&buff[0]);

      FILE *file;
      char* file_name = CLIENT_FILE;
        file = fopen( file_name, "w" ); 
        fputs(buffer, file );
        memset(buffer, 0, 30*Nsize * sizeof(char));
        fclose( file );
    }

    //выход
    closesocket(my_sock);
    WSACleanup();

    return 0;
  }


Код сервера:
Код

#include <stdio.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>
#pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
#pragma comment (lib, "mswsock.lib")

  #define PORT 15150    // порт сервера
  #define Line "File is recivied"
  #define slash "|" 
#define N 1024

  int main(int argc, char* argv[])
  {
    char buff[N];

    printf("Server start working...\n");

    //подключение библиотеки 
    WSADATA WsaData;
    if( WSAStartup(0x0202, &WsaData) )
    {
        printf("Winsock cannot be started\r\n");
        return false;
    }
    //создание сокета
    SOCKET my_sock;
    my_sock=socket(AF_INET,SOCK_DGRAM,0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("Socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }

    //связывание сокета с локальным адресом 
    sockaddr_in local_addr;
    memset(&local_addr, 0, sizeof(sockaddr_in));
    local_addr.sin_family=AF_INET;
    local_addr.sin_addr.s_addr=INADDR_ANY;
    local_addr.sin_port=htons(PORT);

    if (bind(my_sock,(sockaddr *) &local_addr, sizeof(local_addr)))
    {
      printf("bind error: %d\n",WSAGetLastError());
      closesocket(my_sock);
      WSACleanup();
      return -1;
    }

    //обработка пакетов, присланных клиентами
    while(1)
    {
      sockaddr_in client_addr;
      memset(&client_addr, 0, sizeof(sockaddr_in));
      int client_addr_size = sizeof(sockaddr_in);
      int bsize=recvfrom(my_sock, buff, N * sizeof(char), 0, (sockaddr *) &client_addr, &client_addr_size);
      if (bsize==SOCKET_ERROR)
      {
            printf("recvfrom() error: %d\n", WSAGetLastError());
            break;
      }

      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst;
      hst=gethostbyaddr((char *)&client_addr.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",(hst)?hst->h_name:"Unknown host",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));

      // добавление завершающего нуля
      buff[bsize]=0;

      // Вывод на экран 
      printf("Client=>Server:%s\n",buff);

      FILE *file;
      char* file_name = buff;
      //file_name[strlen(file_name) - 1] = '\0';
      file = fopen( file_name, "r" );
      if( file != 0 )
      {
//            int N = 1024;
            char buffer[N + 1];
            fseek(file,0,2);
            int filesize = ftell(file);
            fseek(file,0,0);
            int filemarker = 0;
            fseek(file,filemarker,0);
            int szee = N;

             while (szee == N)
            {
              printf("Recieve file - ");
              memset(buffer, 0, N);
              szee = fread(buffer, sizeof(char), N, file);
              //buffer[szee - 1] = '\0';

              sendto(my_sock,&buffer[0],szee,0,
              (sockaddr *)&client_addr, sizeof(client_addr));
              printf("filemarker = %d of filesize = %d \n", filemarker, filesize);
              filemarker += szee;
            }
             char* line = Line;
             sendto(my_sock,&line[0],strlen(&line[0]),0,
              (sockaddr *)&client_addr, sizeof(client_addr));

          fclose(file);
        }
               else
            {
               printf("File not found !!!");
            }
    }
    system("PAUSE");
    return 0;
  }

PM MAIL   Вверх
alexuni
  Дата 27.10.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



Мда...... Складывается такое впечатление, что я общаюсь сам с собой........ smile 
Тем не менее я все же сумел доделать свою лабу. Окончательный вариант выглядит следующим образом 
(может пригодится тем, кто так же не может ни до кого достучаться...  smile )

Код клиента:
Код

#include <stdio.h>
#include <string.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>
#include <memory.h>
#include <string.h>

   #pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
   #pragma comment (lib, "mswsock.lib")

  #define PORT 15150
  #define SERVERADDR "127.0.0.1"
  #define CLIENT_FILE "example.txt" //файл на клиенте
  #define Line "File is recivied"
  int p;

#define Nsize 1024
  int main(int argc, char* argv[])
  {
    char buffer[30*Nsize];
    char buff[Nsize + 1];
    printf("Client start working...\n");

    //иницилизация библиотеки Winsocks
    WSADATA WsaData;
    if( WSAStartup(0x0202, &WsaData) )
    {
        printf("Winsock cannot be started\r\n");
        return false;
    }

    //открытие сокета
    SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }

    //обмен сообщений с сервером
    // установка возможности широковещательного адреса
    int i = 1;
    if (setsockopt(my_sock, SOL_SOCKET, SO_BROADCAST, (char *)&i, sizeof(i)) == -1)
    {
        printf ("Error setting broadcast socket\n");
        WSACleanup();
        return -1;
    }
    HOSTENT *hst;
    sockaddr_in dest_addr;
    memset(&dest_addr, 0, sizeof(sockaddr_in));
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);

    
    // определение IP-адреса узла
    if (inet_addr(SERVERADDR))
      dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    else
      if (hst=gethostbyname(SERVERADDR))
        dest_addr.sin_addr.s_addr=((unsigned long **)
              hst->h_addr_list)[0][0];
    else
      {
        printf("Unknown host: %d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }
     

    while(1)
    {
      // чтение сообщения с клавиатуры
      printf("\nClient=>Server:");
      scanf("%s", buff);
      if (!strcmp(buff,"quit\n")) break;

      int N=30;
      printf("Number of block is:");
      scanf("%d", &N);
      char blockN[3];
      sprintf(blockN, "%3d", N);
      char tBuf[53];
      memcpy((void*)tBuf, (void*)blockN, 3); // в первые 3 символа пишем N
      memcpy((void*)(tBuf+3), (void*)buff, 50); // пишем в tBuf содержимое buff

      // Передача сообщений на сервер
      sendto(my_sock, tBuf, strlen(tBuf), 0, (sockaddr *) &dest_addr,sizeof(sockaddr_in));

      // Прием сообщения с сервера
      sockaddr_in server_addr;
      int server_addr_size=sizeof(server_addr);
      char* line = Line;
      p = 0;

      while(*buff!=*line)
          {
              memset(buff, 0, Nsize);
              int n=recvfrom(my_sock,&buff[0],Nsize + 1,0,
               (sockaddr *) &server_addr, &server_addr_size);

                printf("Was recieved bytes %d\n",n);
      
                if (n==SOCKET_ERROR)
                {
                   printf("recvfrom() error:"\
                   "%d\n",WSAGetLastError());
                   closesocket(my_sock);
                   WSACleanup();
                   return -1;
                }
                buff[n]=0;
                if(*buff!=*line)
                {
                for(int i=0;i<strlen(buff);i++)
                {
                  buffer[p+i] = buff[i];
                }
                
                p+=n;
                buffer[p]=0;
                }
           } 

      // Вывод принятого с сервера сообщения об успешной операции на экран
      printf("Client<=Server:%s",&buff[0]);

      FILE *file;
      char* file_name = CLIENT_FILE;
        file = fopen( file_name, "w" ); 
        fputs(buffer, file );
        memset(buffer, 0, 30*Nsize * sizeof(char));
        fclose( file );
    }

    //выход
    closesocket(my_sock);
    WSACleanup();

    return 0;
  }


Код сервера:
Код

#include <stdio.h>
#include <winsock2.h> // Включаем использование сокетов
#include <windows.h>
#include <memory.h>
#include <string.h>
#pragma comment(lib, "WSock32.lib") // Используем эту библиотеку
#pragma comment (lib, "mswsock.lib")

  #define PORT 15150    // порт сервера
  #define Line "File is recivied"
  #define Nsize 1024

  int main(int argc, char* argv[])
  {
    char buff[Nsize];

    printf("Server start working...\n");

    //подключение библиотеки 
    WSADATA WsaData;
    if( WSAStartup(0x0202, &WsaData) )
    {
        printf("Winsock cannot be started\r\n");
        return false;
    }
    //создание сокета
    SOCKET my_sock;
    my_sock=socket(AF_INET,SOCK_DGRAM,0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("Socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }

    //связывание сокета с локальным адресом 
    sockaddr_in local_addr;
    memset(&local_addr, 0, sizeof(sockaddr_in));
    local_addr.sin_family=AF_INET;
    local_addr.sin_addr.s_addr=INADDR_ANY;
    local_addr.sin_port=htons(PORT);

    if (bind(my_sock,(sockaddr *) &local_addr, sizeof(local_addr)))
    {
      printf("bind error: %d\n",WSAGetLastError());
      closesocket(my_sock);
      WSACleanup();
      return -1;
    }

    //обработка пакетов, присланных клиентами
    while(1)
    {
      char tBuf[53];
      sockaddr_in client_addr;
      memset(&client_addr, 0, sizeof(sockaddr_in));
      int client_addr_size = sizeof(sockaddr_in);
      int bsize=recvfrom(my_sock, tBuf, Nsize * sizeof(char), 0, (sockaddr *) &client_addr, &client_addr_size);
      if (bsize==SOCKET_ERROR)
      {
            printf("recvfrom() error: %d\n", WSAGetLastError());
            break;
      }

      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst;
      hst=gethostbyaddr((char *)&client_addr.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",(hst)?hst->h_name:"Unknown host",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));

       char blockN[3];
       memcpy((void*)blockN, (void*)tBuf, 3);
       memcpy((void*)buff, (void*)(tBuf+3), 50); //выделztv содержимое buff  
       int N = atoi(blockN); //определяем N
       printf("\nNumber of block is:%d\n", N);

      // добавление завершающего нуля
      buff[bsize-3]=0;

      // Вывод на экран 
      printf("Client=>Server:%s\n",buff);

      FILE *file;
      char* file_name = buff;
      file = fopen( file_name, "r" );
      if( file != 0 )
      {
            char buffer[Nsize + 1];
            fseek(file,0,2);
            int filesize = ftell(file);
            int filemarker = 0;
            fseek(file,Nsize*N,0);
            int szee = Nsize;

             while (szee == Nsize)
            {
              printf("Recieve file - ");
              memset(buffer, 0, Nsize);
              szee = fread(buffer, sizeof(char), Nsize, file);

              sendto(my_sock,&buffer[0],szee,0,
              (sockaddr *)&client_addr, sizeof(client_addr));
              printf("filemarker = %d of filesize = %d \n", filemarker, filesize);
              filemarker += szee;
            }
             char* line = Line;
             sendto(my_sock,&line[0],strlen(&line[0]),0,
              (sockaddr *)&client_addr, sizeof(client_addr));

          fclose(file);
        }
               else
            {
               printf("File not found !!!");
            }
    }
    system("PAUSE");
    return 0;
  }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0985 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.