网络套接字函数

基本TCP客户端/服务器程序的套接字函数基本TCP客户端/服务器程序的套接字函数在这里插入图片描述
socket创建一个套接字
bind绑定ip和port
listen使套接字变为可以被动链接
accept等待客户端的链接
recv/send接收发送数据
socket函数:
在 Linux 下使用 <sys/socket.h> 头文件中 socket() 函数来创建套接字。
原型为:
int socket(int af, int type, int protocol);
1.af 为地址族(Address Family),也就是 IP 地址类型,常用的有 AF_INET 和 AF_INET6。AF 是“Address Family”的简写,INET是“Inetnet”的简写。AF_INET 表示 IPv4 地址,例如 127.0.0.1;AF_INET6 表示 IPv6 地址,例如 1030::C9B4:FF12:48AA:1A2B。
需要记住127.0.0.1,它是一个特殊IP地址,表示本机地址。
你也可以使用 PF 前缀,PF 是“Protocol Family”的简写,它和 AF 是一样的。例如,PF_INET 等价于 AF_INET,PF_INET6 等价于 AF_INET6。
2.type 为数据传输方式/套接字类型,常用的有 SOCK_STREAM(流格式套接字/面向连接的套接字) 和 SOCK_DGRAM(数据报套接字/无连接的套接字)。
3.protocol 表示传输协议,常用的有 IPPROTO_TCP 和 IPPTOTO_UDP,分别表示 TCP 传输协议和 UDP 传输协议。
返回值:
成功:返回指向新创建的socket的文件描述符,失败:返回-1,设置errno。

bind函数:
bind函数把一个本地协议地址赋予一个套接字。将参数sockfd和addr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听addr所描述的地址和端口号。对于网际协议,协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合。
#include<sys/socket.h>
int bind(int sockfd, const struct sockaddr, socklen_t addrlen);
第二个参数是一个指向特定协议的地址结构的指针,第三个参数是该地址结构的长度。对于TCP,调用bind函数可以指定一个端口号,或指定一个IP地址,也可以两者都指定,还可以都不指定。

listen函数
它做两件事:
1、当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字。listen函数把一个未连接的套接字转换为一个被动套接字,指示内核应该接受指向该套接字的连接请求。根据TCP状态转换图,调用listen导致套接字从CLOSED状态转换到LISTEN状态。
2、listen函数的第二个参数规定了内核应该为相应套接字排队的最大连接个数。
#include<sys/socket.h>
int listen(int sockfd, int backlog);
返回:若成功则为0,若出错则为-1

accept函数
accept函数由TCP服务器调用,用于从以完成连接队列队头返回下一个以完成连接。如果以完成队列为空,那么进程被投入睡眠(假定套接字为默认的阻塞方式)。
int acceptn ( int sockfd, struct sockaddr * cliaddr,socklen_t * addrlen);
参数cliaddr和addrlen用来返回已连接的对端进程的协议地址。
addrlen是值-结果参数:
调用前,我们将由*addrlen所引用的整数值置为由cliaddr所指的套接字地址结构的长度,返回时,该整数值即为由内核存放来自该套接字地址结构内的确定字节数。如果accept成功,那么其返回值是由内核自动生成的一个全新的描述符,代表与所返回客户的TCP连接。
connect函数
定义函数:
int connect (int sockfd,struct sockaddr * serv_addr,int addrlen);
connect函数通常用于客户端建立tcp连接。
参数:
sockfd:标识一个套接字。
serv_addr:套接字s想要连接的主机地址和端口号。
addrlen:name缓冲区的长度。
返回值:
成功则返回0,失败返回-1,错误原因存于errno中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值