The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Сокеты"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Сокеты"
Сообщение от zhr emailИскать по авторуВ закладки on 27-Окт-03, 15:06  (MSK)
Не работает :о)

Точнее ситуация такая. После компиляции и запуска программы в первый раз
видим на экране

./scan 192.168.0.1 1 100
......
Port: 17 status: 0
Port: 18 status: 0
Port: 19 status: 0
Port: 20 status: 0
Port: 21 status: 0
Port: 22 status: 0
Port: 23 status: 0
Port: 24 status: 0
Port: 25 status: 0
......

В общем врет все. Со второго запуска видим.
......
Port: 17 status: -1
Port: 18 status: -1
Port: 19 status: -1
Port: 20 status: -1
Port: 21 status: 0
Port: 22 status: 0
Port: 23 status: -1
Port: 24 status: -1
Port: 25 status: 0
......
Что в принципе соответствует действительности :о)
Тоже самое наблюдается если не запускать прогу пару минут.

P.S. Если честно, то эт моя первая попытка ченить написать под UNIX, так что сильно не пинать.
---src---
#include "./include/test.h"
int     err_con;
int     port_from ;
int     port_to;
int     sock;
int     counter;

struct sockaddr_in      sock_addr;
struct hostent*         hst;

void GetParam(int g_argc, char *g_argv[]);

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

        hst = gethostbyname(argv[1]);

        for(counter=(int)min(port_from,port_to);counter!=(int)max(port_from,port_to)+1;counter++)
        {
                sock = socket(AF_INET,SOCK_STREAM,0);

                bzero(&sock_addr,sizeof(sock_addr));
                sock_addr.sin_family      =   AF_INET;
                sock_addr.sin_addr.s_addr =   ((struct in_addr*)hst->h_addr_list[0])->s_addr;
                sock_addr.sin_port        =   htons(counter);
                bind(sock,(SA*)&sock_addr,sizeof(sock_addr));

                err_con = connect(sock,(SA *)&sock_addr,sizeof(sock_addr));
                printf("Port: %i status: %i \n",counter,err_con);

                close(sock);
        }
return 0;
}

void GetParam(int g_argc, char *g_argv[])
{
        switch(g_argc)
        {
                case 3:
                     port_from = port_to = atoi(g_argv[2]);
                     if(port_from == 0)
                     {
                        printf("Error. Port value = 0\n");
                        exit(1);
                     }
                     break;
                case 4:
                     port_from = atoi(g_argv[2]);
                     port_to   = atoi(g_argv[3]);
                     if(port_from == 0 || port_to == 0)
                     {
                        printf("Error. Port value = 0\n");
                        exit(1);
                     }
                     break;
                default:
                     printf("Usage: scan <host> <port> or scan <host> <port_from> <port_to>\n");
                     exit(1);
                     break;
        }
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Сокеты"
Сообщение от zhr emailИскать по авторуВ закладки on 27-Окт-03, 15:10  (MSK)
Сори ...
Сегодня весь инет что за уралом с завидной переодичностью падает. Поэтому отправилось два сообщения.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Сокеты"
Сообщение от Olej emailИскать по авторуВ закладки on 27-Окт-03, 15:28  (MSK)
>Сори ...
>Сегодня весь инет что за уралом с завидной переодичностью падает. Поэтому отправилось
>два сообщения.

Нужно скопировать отсюда что нужно (код программный) - а ветку удалить.
По коду ("первый опыт UNIX") - везде, [b]везде[/b] ... в каждом вызове - проверяйте код возврата!


  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Сокеты"
Сообщение от Olej emailИскать по авторуВ закладки on 27-Окт-03, 15:35  (MSK)
>Не работает :о)

Посмотрите:
http://qnx.org.ru/index.php?option=com_minibb&action=vthread&forum=14&topic=1713
- может чего подскажет ;-)?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Сокеты"
Сообщение от zhr emailИскать по авторуВ закладки on 27-Окт-03, 17:11  (MSK)
Всё ... помоему нашел.

Вызов bind() в данном случае не имел смысла (тем более в цикле :о) ).

#include<sys/socket.h>
int bind(int socket, const struct sockaddr *addr, socklen_t addrlen)
"Клиент TCP обычно позволяет ядру выбирать динамически назначаемы порт, если приложение не требует зарезервированного порта ..." и т.д по тексту

т.е. Если приложение не есть сервер, а простой клиент, и номер порта нам не важен, то и вызов функции bind необязателен.

Надеюсь что я прав :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Сокеты"
Сообщение от genie Искать по авторуВ закладки on 28-Окт-03, 01:29  (MSK)
Absolutno prav - bind sovershenno zdes' ne nuzhen.


>Всё ... помоему нашел.
>
>Вызов bind() в данном случае не имел смысла (тем более в цикле
>:о) ).
>
>#include<sys/socket.h>
>int bind(int socket, const struct sockaddr *addr, socklen_t addrlen)
>"Клиент TCP обычно позволяет ядру выбирать динамически назначаемы порт, если приложение не
>требует зарезервированного порта ..." и т.д по тексту
>
>т.е. Если приложение не есть сервер, а простой клиент, и номер порта
>нам не важен, то и вызов функции bind необязателен.
>
> Надеюсь что я прав :)


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру