首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用glib/gio指定ipv6接口

使用glib/gio指定ipv6接口
EN

Stack Overflow用户
提问于 2014-01-04 01:16:59
回答 1查看 360关注 0票数 0

我正在尝试使用Gnome glib/gio C库来创建一个客户端程序,以便通过IPv6连接到服务器。我的服务器盒有一个链路本地IPv6地址:

代码语言:javascript
复制
inet6 addr: fe80::2d0:c9ff:feda:99e0/64 Scope:Link

因此,为了访问它,我必须告诉客户端软件使用哪个接口(在本例中为eth0)。因此,以下命令可以工作(使用端口1500):

代码语言:javascript
复制
nc -6 fe80::2d0:c9ff:feda:99e0%eth0 1500

在glib中,使用%eth0表示法违反了URI表示法:

代码语言:javascript
复制
(process:31159): GLib-GIO-WARNING **: Invalid URI 'none://[fe80:0:0:0:2d0:c9ff:feda:99e0%eth0]:1500'

我查看了代码,它显然希望看到百分号转义符号(即字符'%25'),但我似乎无法获得正确的格式:

代码语言:javascript
复制
** (process:5741): ERROR **: Invalid URI 'none://[fe80:0:0:0:2d0:c9ff:feda:99e0%25eth0]1500'

那么,有人知道如何指定接口吗?

编辑:这是代码

代码语言:javascript
复制
// gchar test[255] = "fe80:0:0:0:2d0:c9ff:feda:99e0%eth0";
// gchar test[255] = "fe80:0:0:0:2d0:c9ff:feda:99e0\%eth0";
// gchar test[255] = "fe80:0:0:0:2d0:c9ff:feda:99e0\x25eth0";
// gchar test[255] = "fe80:0:0:0:2d0:c9ff:feda:99e0\%%25eth0";
gchar test[255] = "[fe80:0:0:0:2d0:c9ff:feda:99e0\%%eth0]";

connection = g_socket_client_connect_to_uri (client,
                                           test,
                                           1500,
                                           NULL,
                                           &error);

编辑2:完整的代码(使用MichaelHampton的输入):

代码语言:javascript
复制
#include <glib.h>
#include <gio/gio.h>

int
main (int argc, char *argv[])
{
   /* initialize glib */
  g_type_init ();

  GError * error = NULL;

  /* create a new connection */
  GSocketConnection * connection = NULL;
  GSocketClient * client = g_socket_client_new();

    connection = g_socket_client_connect_to_host (client,
                                                  (gchar*)"fe80::5054:ff:fe1f:6b6c\%br0",
                                                   1500, /* your port goes here */
                                                   NULL,
                                                   &error);

  /* don't forget to check for errors */
  if (error != NULL)
  {
      g_error (error->message);
  }
  else
  {
      g_print ("Connection successful!\n");
  }

  return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-07 01:27:54

啊,你调用了错误的函数。您应该使用g_socket_client_connect_to_host直接连接到主机和端口。

下面是一个有效的示例:

代码语言:javascript
复制
 connection = g_socket_client_connect_to_host (client,
                                              (gchar*)"fe80::5054:ff:fe1f:6b6c\%br0",
                                               1500, /* your port goes here */
                                               NULL,
                                               &error);

完整的示例代码,看起来像是您正在使用的,在相关问题中:GIO socket-server / -client example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20909160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档