zoukankan      html  css  js  c++  java
  • Linux Socket学习为套接口绑定地址

       当我们使用socket函数创建一个套接口之后,这个套接口就处于无名状态,虽然之前我们提到即使没有地址,套接口也能使用,但是这个只限于套接口对在同一个Linux内核中,如果位于两台不同的主机的套接口需要连接,而又没有地址,那么就无法工作。

       函数bind的作用就是为无名套接口分配地址,语法如下:

    #include <sys/types.h>
    #include <sys/socket.h>
    int bind(int sockfd, struct sockaddr* my_addr, int addrlen);

    函数调用成功返回0,否则返回-1,我们可以通过查看errno的值来了解错误原因。

       但是需要注意的是提供给bind函数的套接口当前必须处于无名状态(也就是没有地址),如果我们使用bind函数为一个已经有地址的套接口绑定另外一个地址的话,会出现错误。

    下面的例子展示了如何使用bind函数。

     ----UNDONE(此处代码稍后添加)

    下面我们来看看geisockname()函数。

    #include <sys/socket.h>
    int getsockname(int s, struct sockaddr* name, socklen_t* namelen);

    其中s表示我们想要知道地址的那个套接口,name指向接受缓冲区的指针,namelen是指向最大长度的指针变量。这个变量给出了接受缓冲区所能够接受的最大字节数,当接收缓冲区被写入之后,这个值就会被更新为实际写入的字节数。

    函数调用成功返回0,否则返回-1、

    下面的代码展示了getsockname函数的使用:

    ----UNDONE(此处代码稍后添加)

    我们在之前了解了使用函数getsockname()可以获得套接口本地协议地址的作用,但是有时候我们不但需要确定套接口的本地协议地址,还需要确定与本地套接口相连接的远程套接口的协议地址,这个时候我们就可以使用函数getpeername():

    #include <sys/socket.h>
    int getpeername(int s, struct sockaddr*name, socklen_t* namelen);

    函数调用成功返回0,失败返回-1、

    下面的例子展示了一下getpeername函数的使用方法:

    ----UNDONE(此处代码稍后添加)
    绑定一个特定的接口地址:

    为了给通信指定一个特定的接口,我们需要:

    1)用socket函数生成一个套接口

    2)使用函数bind将想要接受连接的接口的IP地址绑定到本地套接口。

    下面的例子展示了怎么绑定一个特定的网络套接口地址:

    ----UNDONE(此处代码稍后添加)

    绑定统配接口

    1)使用socket函数生成套接口,2)使用bind函数将IP地址INADDR_ANY绑定到本地套接口。下面的代码展示了这一操作:

    ----UNDONE(此处代码稍后添加)


    ==============================================================================

    本博客已经废弃,不在维护。新博客地址:http://wenchao.ren


    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
    们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
    实我是一个程序员

    ==============================================================================
  • 相关阅读:
    一万字详解 Redis Cluster Gossip 协议
    Java使用多线程异步执行批量更新操作
    闲鱼是如何实践一套完整的埋点自动化验证方案的?
    OSS 阿里云存储操作实例以及错误案例
    OSS 阿里云存储操作实例以及错误案例
    Java知识体系总结(2021版)
    倪文迪陪你学蓝桥杯2021寒假每日一题:1.11日(2017省赛A第9题)
    七分之一在线评论都有假,人工智能救一把?
    太委屈!曾一举击败英伟达,却因坚持研发背负骂名的国际 IT 大佬
    SpringBoot四大核心之自动装配——源码解析
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2647646.html
Copyright © 2011-2022 走看看