реклама на сайте
подробности

 
 
> Работа с сокетами.
Jenya7
сообщение Sep 13 2017, 13:35
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Пишу на vxWorks но наверно это не важно. Принцип везде одинаков.
Создаю сокет и пытаюсь подключиться к серверу. Сервером выступает компьютер.
На компьютере запускаю Hercules -> TCP Server -> Port 8200 (SERVER_PORT_NUM) -> Listen. Сервер бежит.

На стороне прибора
Код
STATUS TCP_ClientConnect (char *serverName, int *soc_desc)
{
    struct sockaddr_in  serverAddr;    /* server's socket address */
    int                 sockAddrSize;  /* size of socket address structure */
    int                 sFd;           /* socket file descriptor */

    /* create client's socket */
    if ((sFd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
    {
        //perror ("socket");
        printf ("SOCKET ERROR\n");
        return (ERROR);
    }

    /* bind not required - port number is dynamic */
    /* build server socket address */
    sockAddrSize = sizeof (struct sockaddr_in);
    bzero ((char *) &serverAddr, sockAddrSize);
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_len = (u_char) sockAddrSize;
    serverAddr.sin_port = htons (SERVER_PORT_NUM);

    if (((int)(serverAddr.sin_addr.s_addr = inet_addr (serverName)) == ERROR) &&
        ((int)(serverAddr.sin_addr.s_addr = hostGetByName (serverName)) == ERROR))
    {
        printf ("UNKNOWN SERVER NAME\n");
        close (sFd);
        return (ERROR);
    }
    
    /* bind a port number to the socket */
    if (bind(sFd, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) == ERROR)
    {
        printf("BIND ERROR\n");
        return (ERROR);
    }

    /* connect to server */
    if (connect (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) != OK)
    {
        printf ("CONNECTION ERROR\n");
        close (sFd);
        return (ERROR);
    }
    
    *soc_desc = sFd;
    
    return (OK);
}

И запускаю таск
Код
int socket_descriptor=0;
char *server_ip = "10.0.0.80";

void tSpectraTaskEntryPoint()
{
    
    if (TCP_ClientConnect(server_ip, &socket_descriptor)==ERROR)
     printf ("CLIENT CONNECT ERROR\n");
    else
    printf("CLIENT CONNECT OK descriptor = %d\n", socket_descriptor);
    
   SpectraMain();
}

Получаю ошибку
BIND ERROR
CLIENT CONNECT ERROR
Значит не выполняется привязка сокета к серверу? Я что то не так делаю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Nov 12 2017, 14:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Надо вместо одного сетевого интерфейса (физического) сделать 2 (виртуальных, с нужным IP).
Для маршрутизаторного ПО (и в Linux ест-но) это должно быть готовое решение.
ps
Для PC/Linux оно должно быть, а вот для embedded - тут вопрос.
psps
Возможно, что такое решение умножит на 2 ресурсы, занимаемые стеком TCP. Влезет ?
IMHO
а тема - IP aliasing sm.gif
Насколько понял, настраивается методом прописки config-файлов Linux sm.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Nov 12 2017, 15:23
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(k155la3 @ Nov 12 2017, 20:53) *
Надо вместо одного сетевого интерфейса (физического) сделать 2 (виртуальных, с нужным IP).
Для маршрутизаторного ПО (и в Linux ест-но) это должно быть готовое решение.
ps
Для PC/Linux оно должно быть, а вот для embedded - тут вопрос.
psps
Возможно, что такое решение умножит на 2 ресурсы, занимаемые стеком TCP. Влезет ?
IMHO
а тема - IP aliasing sm.gif
Насколько понял, настраивается методом прописки config-файлов Linux sm.gif

есть конфигурационные хедеры но там ни слова об IP.

По моему нашел
Цитата
ifAddrAdd( )

NAME

ifAddrAdd( ) - add an interface address for a network interface

SYNOPSIS

STATUS ifAddrAdd
(
char * interfaceName, /* name of interface to configure */
char * interfaceAddress, /* Internet address to assign to interface */
char * broadcastAddress, /* broadcast address to assign to interface */
int subnetMask /* subnetMask */
)

DESCRIPTION

This routine assigns an Internet address to a specified network interface. The Internet address can be a host name or a standard Internet address format (e.g., 90.0.0.4). If a host name is specified, it should already have been added to the host table with hostAdd( ).

You must specify both an interfaceName and an interfaceAddress. A broadcastAddress is optional. If broadcastAddress is NULL, in_ifinit( ) generates a broadcastAddress value based on the interfaceAddress value and the netmask. A subnetMask value is optional. If subnetMask is 0, in_ifinit( ) uses a subnetMask the same as the netmask that is generated by the interfaceAddress. The broadcastAddress is also destAddress in case of IFF_POINTOPOINT.


тут возникает другой вопрос. допустим сконфигурировал
Код
//FIRST IP;
ifAddrSet ("ETH0","10.0.0.10");
ifMaskSet ("ETH0", 0xffffff00);
//SECOND IP
ifAddrAdd ("ETH0","192.168.101.100","192.168.101.255",0xffffff00);

а как задать что первый IP относиться к UDP , а второй IP к TCP?

Сообщение отредактировал Jenya7 - Nov 12 2017, 15:57
Go to the top of the page
 
+Quote Post
k155la3
сообщение Nov 14 2017, 16:07
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Jenya7 @ Nov 12 2017, 18:23) *
. . .
тут возникает другой вопрос. допустим сконфигурировал
Код
//FIRST IP;
ifAddrSet ("ETH0","10.0.0.10");           [b]IP для интерфейса, он "видится" маршрутизатором извне[/b]
ifMaskSet ("ETH0", 0xffffff00);             [b]маска. Отсюда видим, что для девайса выделена "минимальная" сеть на 254 (кажется) адреса[/b]
//SECOND IP
ifAddrAdd ("ETH0","192.168.101.100","192.168.101.255",0xffffff00);     [b] (!) А вот тут я не уверен. Диапазон адресов из другой сети [/b]?

. . . .
Отсюда может быть и ошибка.

ps
Может виртуальный интерфейс (второй)
Код
sudo gedit /etc/network/interfaces
И редактируешь его приводя к следующему виду:
auto eth0
iface eth0 inet static
  address 192.168.1.5
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1
  dns-nameservers 8.8.8.8 192.168.1.1

auto eth0:1
iface eth0:1 inet static
  address 192.168.0.5
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.0.1
  hwaddress ether 00269ebba619 --------------------- это похоже на "виртуальный" MAC
  dns-nameservers 8.8.8.8 192.168.1.1
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Работа с сокетами.   Sep 13 2017, 13:35
- - Jenya7   модифицировал функцию чтоб выводить информацию. Ко...   Sep 13 2017, 14:45
|- - des333   Цитата(Jenya7 @ Sep 13 2017, 17:45) перев...   Sep 13 2017, 14:59
|- - Tarbal   Цитата(des333 @ Sep 13 2017, 18:59) И как...   Nov 4 2017, 02:19
- - gerber   Клиентский сокет можно не bind-ить, так как порт в...   Sep 13 2017, 15:04
|- - Jenya7   Цитата(gerber @ Sep 13 2017, 20:04) Клиен...   Sep 13 2017, 15:09
|- - gerber   Цитата(Jenya7 @ Sep 13 2017, 18:09) но я ...   Sep 13 2017, 15:42
- - Jenya7   Тут возникает такой вопрос. Если связь с сервером ...   Sep 14 2017, 06:02
- - Эдди   Все надо проверять. Здесь я намучился с этими черт...   Sep 14 2017, 07:11
|- - Jenya7   Цитата(Эдди @ Sep 14 2017, 12:11) Все над...   Sep 14 2017, 07:21
- - Сергей Борщ   Все уже придумано за нас. Почитайте про SO_KEEPALI...   Sep 14 2017, 08:01
|- - Jenya7   Цитата(Сергей Борщ @ Sep 14 2017, 13:01) ...   Sep 14 2017, 09:35
|- - Сергей Борщ   QUOTE (Jenya7 @ Sep 14 2017, 12:35) а как...   Sep 14 2017, 11:07
|- - Jenya7   Цитата(Сергей Борщ @ Sep 14 2017, 16:07) ...   Sep 14 2017, 11:19
- - gerber   Если удаленный сервер корректно закрыл TCP-соедине...   Sep 14 2017, 13:41
|- - Jenya7   Цитата(gerber @ Sep 14 2017, 19:41) Если ...   Sep 14 2017, 14:02
- - Jenya7   Ну хорошо. Другой вопрос. Я в таске принимаю данны...   Sep 17 2017, 06:01
- - Jenya7   Создал сокет как TCP Client. Читаю с сервера, пишу...   Oct 31 2017, 08:45
- - Jenya7   Мой девайс присоединен к двум другим. С одним он д...   Nov 12 2017, 13:11
|- - k155la3   Цитата(Jenya7 @ Nov 12 2017, 17:11) Мой д...   Nov 12 2017, 14:25
|- - Jenya7   Цитата(k155la3 @ Nov 12 2017, 20:25) Попр...   Nov 12 2017, 14:30
|- - XVR   Цитата(Jenya7 @ Nov 12 2017, 18:23) а как...   Nov 13 2017, 10:47
||- - Jenya7   Цитата(XVR @ Nov 13 2017, 15:47) Никак, д...   Nov 14 2017, 06:51
- - k155la3   Да, мой тезис по alias ошибочен. Два адреса у одно...   Nov 14 2017, 08:24
|- - Jenya7   Цитата(k155la3 @ Nov 14 2017, 13:24) Да, ...   Nov 14 2017, 09:21
|- - k155la3   Цитата(Jenya7 @ Nov 14 2017, 13:21) . . ....   Nov 14 2017, 11:53
- - XVR   Цитатаbind используется, когда есть несколько откр...   Nov 14 2017, 12:11
|- - Jenya7   Цитата(XVR @ Nov 14 2017, 18:11) Нет. bin...   Nov 14 2017, 15:04
|- - gosha-z   Цитата(XVR @ Nov 14 2017, 15:11) Нет. bin...   Nov 14 2017, 16:33
- - k155la3   XVR спасибо за инф.   Nov 14 2017, 12:20
- - Jenya7   Продолжаю серию дурацких вопросов. У меня NFS-серв...   Nov 20 2017, 08:39
- - XVR   ЦитатаТакое возможно?Переход по символической ссыл...   Nov 20 2017, 10:46
|- - Jenya7   Цитата(XVR @ Nov 20 2017, 16:46) Переход ...   Nov 20 2017, 10:54
- - XVR   Цитатая создаю папку на сервере - mkdir("/ram...   Nov 20 2017, 12:35
- - Jenya7   Цитата(XVR @ Nov 20 2017, 18:35) Клиент у...   Nov 20 2017, 12:59


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016