【问题标题】:bind/connect to network interface card using FreePascal or other language(s)?使用 FreePascal 或其他语言绑定/连接到网络接口卡?
【发布时间】:2013-11-20 10:46:34
【问题描述】:

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

您将如何使用 FreePascal 连接到卡 A?

【问题讨论】:

  • 您要创建客户端应用程序还是服务器应用程序?在任何情况下,您都应该有一个像“绑定”这样的函数,您将在其中指定 IP 地址和端口号。
  • 假设我想创建一个客户端应用程序。你能给我一个例子或一些简单的东西。谢谢。
  • 如果我给你一个C语言的例子有用吗?
  • 我希望代码对你有帮助,我可以回答你的问题。

标签: network-programming freepascal lazarus


【解决方案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;
}

【讨论】:

  • 如果您正在发现网络接口,您通常不知道 IP。
  • 问题指定您有网络接口信息。如果你没有它,你只会发现接口。在这里你有办法发现它们:stackoverflow.com/questions/19932189/…
猜你喜欢
  • 1970-01-01
  • 2017-02-08
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
相关资源
最近更新 更多