参数说明
int sockfd, //socket 的fd
void *buf, // 保存数据的一块空间的地址
size_t len, //这块空间的大小
int flags,// 0 默认的接收方式 -----阻塞方式 默认行为是阻塞
struct sockaddr *src_addr,//用来保存发送方的地址信息,接收谁给发的
socklen_t *addrlen);表示发送方发送实际的地址信息大小
注意 要是不关心是谁,我们addrlen或者大小写NULL
我们先将值传递过去,他会将我们的真实的长度带出来,也就是说我们自己建立好一个他的地址信息的结构体
返回值
成功 返回接收到的字节数
失败 返回-1
注意点
服务器是需要绑定一下来进行操作
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:
如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2指定的接口地址关联:用于从该接口接受数据。如果该函数在客户端调用,则表示要将数据从参数1所在的描述符中取出并从参数2所在的接口设备上发送出去。
注意:
如果是客户端,则该函数可以省略,由默认接口发送数据。
参数
注意点
客户端可以绑定地址,但一般不绑定
1、建立连接
socket //买了一部手机
bind // 可选 //插上sim卡
connect 发起连接 // 拨打电话
2、通信过程
read
write
close
1、建立连接
socket // 买了一部手机
bind //插上sim卡
listen //监听 客户端的连接请求
accept //接听
2、通信过程
read
write
close
1、tcp三次握手(建立连接)
客户端 服务器
-----我要和你连接--------------------->
<-------------------------------好的,可以建立连接
-----------好------------------------------>
2、tcp 四次挥手(断开连接)
客户端 服务器
-----我要和你断开连接--------------------->
<-------------------------------好的,可以断开
<-------------------------------我也要断开-------
-----------好----------------------------------------->
#include /* See NOTES */
#include
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
功能:该函数固定有客户端使用,表示从当前主机向目标主机发起链接请求。
参数:
返回值:成功0 失败 -1
#include /* See NOTES */
#include
int listen(int sockfd, int backlog);
功能:
反应监听那个套接字并且建立成功之后返回一个新的套接字
参数
返回值
listen 会标记一下被动的socket(这个socket将会被用来接受到来的接受请求)
注意
其有两个socket
1、监听的socket
2、处理建立连接的socket(后续进行操作的socket)