当前位置: 首页 > 面试题库 >

在连接客户端代码之前进行绑定

南门鸿雪
2023-03-14
问题内容

我有多个以太网I / F。eth0,eth1,eth2 …,我想连接到外部服务器,例如1.2.3.4:80。

我的连接没问题,但是在某些特殊情况下,我想以eth1而不是eth0的身份连接。服务器的代码检查我接口的IP地址。我认为连接之前需要绑定。没有bind(2),服务器总是从eth0获取数据

我正在寻找演示此行为的代码。有人链接到示例吗?


问题答案:

您不需要bind(2)这个。

您要在此处执行的操作是使用与套接字不同的 网络接口
。要使用系统默认设置以外的网络接口,您需要将SO_BINDTODEVICEsocket选项与一起使用setsockopt"eth1"例如,您要使用的接口应在要传递给ifr_nameifreqstruct字段中指定为字符串setsockopt。为此,您需要包括<net/if.h>标题。

基本上,类似以下(未经测试)的代码:

int set_interface(int socket_fd, const char* interface_name)
{
    ifreq interface;
    memset(&interface, 0, sizeof(interface));
    strncpy(interface.ifr_name, interface_name, IFNAMSIZ);
    int res = setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof(ifreq));
    return res;
}

另外,请确保检查返回码,以防setsockopt失败。



 类似资料:
  • 我使用以下测试代码调用REST服务: 但我得到了以下错误: javax。ws。rs.ProcessingException:无法在组织上调用请求。jboss。放松点。客户jaxrs。引擎。ApacheHttpClient4引擎。在org调用(ApacheHttpClient4Engine.java:287)。jboss。放松点。客户jaxrs。内部的ClientInvocation。在org上调用

  • 在Netty中创建客户端连接时,我有一个问题。 这里,为什么我们没有一个bind方法,将通道绑定到发起客户端连接的端口(在客户端)?我们唯一需要提供的就是给出服务器地址和端口如下: 这是在客户端还是服务器端创建了一个新的通道?此通道绑定在客户端的哪个端口? 我们在执行服务器端引导时进行绑定,如下所示 我很困惑,不明白客户端从哪个端口向服务器发送数据,使用的是什么通道?

  • null 当MQTT代理变得不可用时,Paho MQTT客户机不能帮助我保证这些QoS2级别的消息将被重新传递,这是正确的说法吗? 因此,我如何区分以下情况,即Client.Publish导致了一个MqttException,其中Paho没有将消息持久化。 下面是它在飞行中坚持的地方 null 连接丢失(32109):PAHO保存消息 客户端当前正在断开连接(32102):PAHO丢失消息 等待服

  • 我在artemis代理中添加了一个mqtt拦截器,以便拦截mqtt客户端连接: 我的客户端apache paho通过这个端口“WS://0.0.0.0:61614”连接到代理。 我的问题是只截获发布到主题的消息。 为什么不截获连接消息?

  • 执行kafka客户端的生产者/消费者连接池有意义吗? kafka是否在内部维护已初始化并准备好使用的连接对象列表? 我们希望最小化连接创建的时间,这样在发送/接收消息时就不会有额外的开销。 目前,我们正在使用apache共享池库来保持连接。 任何帮助都将不胜感激。

  • 我遇到了一个有趣的问题,HTTP 1.1 POST请求的TCP连接在请求之后立即关闭(即,在服务器可以发送响应之前)。 关于测试环境的一些细节: 客户端-Windows XP、Internet Explorer 8、Flash player 12。 服务器-Java 7 在上述行为之前,我们有几个长期存在的TCP连接,每个都被重用用于多个HTTP请求;我们打开一个长轮询,当这个轮询完成时,打开另一