TCP、UDP

一、recvfrom函数

recvfrom:用于从套接字接收数据。该函数通常与无连接的数据报服务(如 UDP)一起使用,

recvfrom() 可以返回数据来源的地址信息。

参数说明:

  • sockfd:套接字文件描述符,通常由 socket 函数创建。
  • buf:指向存放接收到数据的缓冲区的指针。
  • len:缓冲区的大小(字节数)。
  • flags:接收数据的标志,通常设置为 0。
  • src_addr:指向 sockaddr 结构的指针,用于存放发送者的地址信息。如果不需要获取地址,可以设置为 NULL
  • addrlen:指向 socklen_t 类型的变量的指针,初始值为 src_addr 所指结构的大小。函数调用后,这个变量会被更新为实际填充的地址长度。(inet_ntoa)

返回值

  • 成功时,返回接收到的字节数。
  • 失败时,返回 -1,并设置 errno 以指示错误原因。

客户端发送给服务器,服务器接收返回客户端程序实例:

客户端:

服务器:

二、bind函数:

用于将一个套接字与一个本地地址(包括IP地址和端口号)绑定。

sockfd:套接字文件描述符。

addr:指向 sockaddr 结构体的指针,指定要绑定的本地地址。

addrlen:addr 结构体的长度。

返回值:

  • 成功:返回 0。
  • 失败:返回 -1,并设置 errno 以指示错误类型。

bind函数就是让套接字文件在通信时使用固定的IP和端口号(针对服务器来说)
调用socket函数创建的套接字仅仅执行了通信等协议,但是并没有指定通信时所需的ip地址和端口号。

ip 是对方设备的唯一标识
端口号 区分同一台计算机上的不同的网络通信进程
如果不调用bind函数指定ip和端口,则会自己指定一个ip和端口,此时违背了TCP通信的可靠性和面向连接的特点

如果说bind函数在服务器端调用,则表示将参数1相关文件与参数2指定的接口地址关联,用于从该接口接收数据。

bind函数在客户端调用,表示将数据从参数1所在的文件描述符中取出,然后从参数2所在的接口设备上发出去。(该函数可以在客户端省略,由默认接口发送数据)

三、TCP

1、

tcp客户端:

建立连接:socket——bind——connect     

通信过程:read-write-close

tcp服务器:

建立连接:socket——bind——listen——accept     

listen :监听 客户端的连接请求 |    accept:接听 完成之后可以收发数据

通信过程:read——write——close

2、tcp建立连接

三次握手

客户端—(请求)—服务器

服务器—(回复请求)—客户端

客户端—(回复服务器的请求)—服务器

四次回收

客户端—(请求断开)—服务器

服务器—(回复请求)—客户端

服务器—(准备断开)—客户端

客户端—(回复请求)—服务器

四、connect函数

connect函数的功能:就是完成面向连接的协议的连接过程,它是主要连接的。

面向连接的协议,在建立连接的时候总会有一方先发送数据,那么谁调用了connect谁就是先发送数据的一方。如此理解connect三个参数是容易了,我必需指定数据发送的地址,同时也必需指定数据从哪里发送,这正好是connect的前两个参数,而第三个参数是为第二个参数服务的。

sockfd:从哪发送,socket的一个接口发送

addr:发送到哪,服务端的地址,connect是主动连接的一方,要存在一个被动连接的一方需要调用listen以接受connect的连接请求,被动连接的一方就是服务器。

addrlen:结构体的长度。

五、listen和accept

listen:用于将一个套接字设置为监听状态,等待客户端的连接请求

参数:sockfd:要监听的套接字描述符

            backlog:服务器套接字可以排队等待的连接请求数目,队列已满就被拒绝。

accept:当客户端的连接请求到达后,accept函数会创建一个新的套接字,并返回一个新的套接字描述符,该描述符与客户端的套接字建立连接。

参数:sockfd:监听套接字,用来接收客户端的连接请求

             *addr:存储客户端的地址信息

              *addrlen:一个指向socklen_t 类型的指针,表address 缓冲区的长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值