博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Socket学习--为套接口绑定地址
阅读量:6709 次
发布时间:2019-06-25

本文共 1225 字,大约阅读时间需要 4 分钟。

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

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

#include 
#include
int bind(int sockfd, struct sockaddr* my_addr, int addrlen);

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

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

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

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

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

#include 
int getsockname(int s, struct sockaddr* name, socklen_t* namelen);

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

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

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

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

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

#include 
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://haxlo.baihongyu.com/

你可能感兴趣的文章
ES6(Proxy 和 Reflect)
查看>>
spring+springMVC+mybatis的整合 part1
查看>>
[Spark]Spark Streaming 指南四 输入DStreams和Receivers
查看>>
众安在线2018半年报:亏损6.668亿元,综合成本率高达124.0%
查看>>
java之 ------------[LeetCode] House Robber 打家劫舍||
查看>>
Android Recyclerview 实现画廊功能
查看>>
Integer 与 Long 数字类型的比较:Java与Kotlin的细节不同
查看>>
官宣!vue.ant.design 低调上线
查看>>
云用户生态发展论坛暨第三届中国云计算用户大会北京站盛大召开
查看>>
Emulator 29.0.3 Canary 发布,Android 模拟器
查看>>
总结一波安卓组件化开源方案
查看>>
oss-server 简单对象存储系统
查看>>
使用fastcgi_finish_request提高页面响应速度
查看>>
javascript成神之路(4):深入理解this关键字,是的就是this
查看>>
Flink1.4 Fault Tolerance源码解析-1
查看>>
Spring Cloud配置中心
查看>>
React 路由状态管理总结
查看>>
JAVA 几种引用类型学习
查看>>
Android WindowManager悬浮窗:不需要申请权限实现悬浮
查看>>
偶遇到客户的奇葩需求
查看>>