привязать/подключиться к сетевой карте с помощью FreePascal или другого языка?

Допустим, у меня есть две разные активные сетевые карты (A и B) в моей системе, и я также знаю информацию об их сетевых интерфейсах.

Как бы вы подключились к карте A, например, с помощью FreePascal?


person ThN    schedule 18.11.2013    source источник
comment
Вы хотите создать клиентское приложение или серверное приложение? В любом случае у вас должна быть такая функция, как bind, где вы собираетесь указать IP-адрес и номер порта.   -  person rodolk    schedule 19.11.2013
comment
Скажем, я хочу создать клиентское приложение. Можете ли вы привести пример или что-то простое. Благодарю.   -  person ThN    schedule 19.11.2013
comment
Будет ли полезно, если я приведу пример на C?   -  person rodolk    schedule 19.11.2013
comment
Я надеюсь, что код был вам полезен, и я смог ответить на ваш вопрос.   -  person rodolk    schedule 27.11.2013


Ответы (1)


Я только что скомпилировал и запустил, вроде работает. Вам просто нужно изменить IP-адреса и порты и добавить дополнительную проверку ошибок.

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <arpa/inet.h>

#define MY_PORT 8564
#define THEIR_PORT 8090

int main()
{
    int     sockfd;
    struct sockaddr_in myaddr;
    struct sockaddr_in theiraddr;
    int res;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    memset(&myaddr, 0, sizeof(struct sockaddr_in));

    myaddr.sin_family = AF_INET;
    myaddr.sin_port = htons((unsigned short)MY_PORT);
    //myaddr.sin_addr = INADDR_ANY; //for any interface

    res = inet_pton(AF_INET, "127.0.0.1", &myaddr.sin_addr);

    if (1 == res)
    {
        res = bind(sockfd, (const struct sockaddr *)&myaddr, sizeof(struct sockaddr_in));

        if (0 == res)
        {
            printf("PASO-1\n");
            theiraddr.sin_family = AF_INET;
            theiraddr.sin_port = htons((unsigned short)THEIR_PORT);
            inet_pton(AF_INET, "10.0.2.78", &theiraddr.sin_addr);
            printf("PASO-2\n");
            connect(sockfd, (const struct sockaddr *)&theiraddr, sizeof(struct sockaddr_in));
        }
    }


   return 0;
}
person rodolk    schedule 19.11.2013
comment
Если вы обнаруживаете сетевые интерфейсы, вы обычно не знаете IP-адреса. - person Marco van de Voort; 21.11.2013
comment
В вопросе указано, что у вас есть информация о сетевом интерфейсе. Если у вас его нет, вы просто открываете интерфейсы. Здесь у вас есть способы их обнаружить: 19954417#19954417" title="lazarus, как вывести список всех доступных сетевых подключений в системе"> stackoverflow.com/questions/19932189/ - person rodolk; 22.11.2013