计算机网络(五): socket编程基本函数介绍

Socket编程:基本函数介绍

1.socket()函数:创建一个socket描述字
int socket(int domain, int type, int protocol)
  • 用于打开操作
  • domain: 协议域(定义了socket的地址类型)---------常用的有: AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等
  • type: 指定socket类型--------常用的有 :SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等
  • protocol: 指定协议(定义了要采用的通讯协议)--------常用的有 :IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议
  • type 和 protocol 不是随意组合的, SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议
2.bind()函数:bind()函数把一个地址族中的特定地址赋给socket(特定名字)
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
  • sockfd: socket描述字,它是通过socket()函数创建的,唯一标识一个socket;
  • addr: const struct sockaddr *指针,指向要绑定给sockfd的协议地址。这个地址结构根据地址创建socket时的地址协议族的不同而不同;
  • addrlen:对应的是地址的长度
  • 因为服务器在启动时都会绑定一个地址(如ip地址+端口号),客户就可以通过它来链接服务;而客户端不用指定,由系统随机生成;----------------因此服务器端在listen()之前要先调用bind(),而客户端在connect()时由系统随机生成;
3.listen()函数及connect()函数
  • 作为服务器,在调用socket()和bind()函数之后,调用listen()函数监听这个socket,如果客户端这时调用connect()时,服务器端就会收到请求
int listen(int sockfd, int backlog)

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
  • listen()函数中第一个参数即为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数
  • connect函数的第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度。客户端通过调用connect函数来建立与服务器的连接
4.accept()函数
  • 服务器端依次调用socket()、bind()、listen()之后,就会监听指定的socket地址了。客户端依次调用socket()、connect()之后就像服务器发送了一个连接请求。服务器监听到这个请求之后,就会调用accept()函数取接收请求,这样连接就建立好了。之后就可以开始网络I/O操作了,即类同于普通文件的读写I/O操作。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
  • accept函数的第一个参数为服务器的socket描述字,第二个参数为指向struct sockaddr *的指针,用于返回客户端的协议地址,第三个参数为协议地址的长度。如果accpet成功,那么其返回值是由内核自动生成的一个全新的描述字,代表与返回客户的连接。
5.读写函数

经过以上步骤,网络中不同进程之间的通信已经建立,可以进行网络I0操作了

  • read()/write()
  • recv()/send()
  • readv()/writev()
  • recvmsg()/sendmsg()
  • recvfrom()/sendto()
6.close()函数
  • 完成连接以及读写操作之后,进行关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生不过一闭一睁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值