Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как закрыть/открыть порт TCP/IP 
:(
    Опции темы
Alca
Дата 30.9.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Как закрыть/открыть порт TCP/IP на уровне винды (среды Builder C++, Visual C++)?

Это сообщение отредактировал(а) Alca - 30.9.2007, 17:04


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 30.9.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пример работы для BCB 6 если не использовать компоненты
Код

#include <stdio.h>
#include <string.h>
// Для работы с библиотекой Winsock2  в исходный текст нужно включить директиву
//#include <winsock2.h>,
#include <winsock2.h>
#include <windows.h>

#define PORT 31337         //  Порт, через который идет подключение к
//серверу....21,80,25,110 и т.п.
#define SERVERADDR "127.0.0.1"     // Адрес сервера

int main ( int argc, char* argv [ ] )
{
         char buff [ 1024 ] ;
         printf ( "TCP Client \n" ); // ну, тут и так понятно
//Перед началом использования библиотеки ее необходимо подготовить к работе с помощью вызова функции
// WSAStartup(Ver, lpWSAData), передав ей в старшем байте номер требуемой версии, а в младшем подверсии.
// Аргумент lpWSAData должен указывать на структуру WSADATA, в которую при успешной инициализации
//будет занесена информация о производителе библиотеки. Если инициализация не удалась, то функция 
//возвращает не нулевое значение.
         if ( WSAStartup ( 0x202, ( WSADATA * ) &buff [ 0 ] ) )
         {
                            printf ( " WSAStart error  %d \n ", WSAGetLastError ( ) );
                            return -1;
          }
// Создаем сокет    socket ( int af, int type, int protocol ). Первый слева аргумент указывает на семейство использу-
//емых протоколов, AF_INET - используеться при создании интернет приложений. SOCK_STREAM - тип //создаваемого сокета, SOCK_STREAM (потоковый) или SOCK_DGRAM (дейтаграммный) или SOCK_RAW //(сырой).Последний аргумент задает тип создаваемого сокета, нулевое значение соответствует выбору по //умолчанию, ТСР - для потоковых, и UDP - дейтограммных.
//Если функция завершилась успешно то она возвращает дескриптор сокета.
          SOCKET my_sock ;
          my_sock=socket ( AF_INET, SOCK_STREAM, 0 );
          if  ( my_sock < 0 )        //
          {
                            printf (" Socket ( ) error    %d \n ", WSAGetLastError ( ) );
                            return  -1;
          }
// Заполнение структуры  sockaddr_in :
          sockaddr_in  dest_addr ;
          dest_addr.sin_family=AF_INET; //инет коннектинг
          dest_addr.sin_port=htons ( PORT ); //порт
          HOSTENT    *hst;  // хост
// Преобразование ip-адреса из символьного в сетевой формат.
          if    ( inet_addr ( SERVERADDR ) !=INADDR_NONE )     dest_addr.sin_addr=inet_addr ( SERVERADDR) ;
          else
//Осуществляем поптыку получения ip-адреса по доменному имени сервера.
                    if   ( hst=gethostbyname ( SERVERADDR ) )    ( ( unsigned long   * ) &dest_addr.sin_addr ) [ 0 ] =
//hst->h_addr_list содержит массив  указателей на адреса, НО не массив адресов
                                                                                             ( ( unsigned long    ** ) hst->h_addr_list ) [ 0 ] [ 0 ] ;
//Если ip-адрес не получен, то работа программы завершаеться
                    else
                    {
                                      printf ( " invalid address   %s \n ", SERVERADDR ) ;
                                      closesocket ( my_sock ) ;
                                      WSACleanup ( ) ;
                                      return  -1;
                    }
//После получения адреса сервера, попытаемся установит соединение.Для этого мы вызовем функцию connect
// (SOCKET s, sockaddr  *  name, len). Первый элемент -SOCKET- это дескриптор сокета,  второй -
//указатель на структуру sockaddr, содержащую в себе адрес (ip) и порт, последний аргумент сообщает о размере
// sockaddr.
// Если по каким-то причинам установить соединение не удаеться, то функция возвращает не нулевое значение.
            if  (connect ( my_sock, ( sockaddr  * ) &dest_addr, sizeof ( dest_addr ) ) )
            {
                            printf (" Connect error  %d \n ", WSAGetLastError ( ) );
                            return -1;
            }

            printf (" Соединение с %s успешно установлено \n\ Type quit for quit \n\n" , SERVERADDR );
 //Далее начинаеться чтение и передача сообщений.
            int nsize;
            while ( ( nsize = recv ( my_sock, &buff[0], sizeof ( buff ) -1,0 ) ) !=SOCKET_ERROR )
            {
       //Ставим завершающий ноль в конце строки
                              buff[ nsize ] =0;
       //Выводим на экран
                              printf ( " S=>C: %s ", buff  ) ;
       //Читаем пользовательский ввод с клавиатуры
                              printf ( "S<=C: " ) ;
                              fgets ( &buff [ 0 ] , sizeof ( buff ) -1, stdin );
        //После того, как ввели слово quit, выходим.....
                              if  ( !strcmp ( &buff [ 0 ], "quit \n " ) )
                              {
                                          printf ( " Exit " );
                                          closesocket ( my_sock ) ; //выход правильный
                                          WSACleanup ( ) ;
                                           return 0;
                              }
        //Передача строки клиента серверу
                              send ( my_sock, &buff [ 0 ], nsize, 0 ) ;
              }

              printf ( " Recv error  %d \n", WSAGetLastError ( )  );
              closesocket ( my_sock ) ;
              WSACleanup ( ) ;
              return -1;
}




--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 30.9.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Спасиб


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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