使用FreePascal或其他语言绑定/连接到网络接口卡?

时间:2013-11-18 21:09:25

标签: network-programming freepascal lazarus

假设我的系统上有两个不同的有源网卡(A和B),并且还知道它们的网络接口信息。

如何使用FreePascal连接到卡A?

1 个答案:

答案 0 :(得分:2)

我刚编译并执行它,它似乎工作。您只需更改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;
}