recvfrom
参数:
sockfd //socket的fd
buf //保存数据的一块空间的地址
len //这块空间的大小
flags //0 默认的接收方式 --- 阻塞方式
src_addr //用来保存发送方的地址信息
addrlen //表示发送方实际的地址信息大小
返回值:
成功 返回接收到的字节数
失败 返回-1
服务器端 --- 把自己的地址公布出去
bind
如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2指定的接口地址关联,用于从该接口接受数据。
如果该函数在客户端调用,则表示要将数据从参数1所在的描述符中取出并从参数2所在的接口设备上发送出去。(客户端可省略,由默认接口发送数据)
sockfd //之前通过socket函数创建的文件描述符,套接字id
addr //物理接口的结构体指针,表示该接口的信息
返回值:
成功 返回0
失败 返回-1
eg:
客户端从键盘获得数据发给服务器,服务器打印并回发
客户端:
socket
//fgets
sendto
recvfrom
printf
服务器端:
socket
bind
recvfrom //保存了客户端的地址 srcaddr
sprintf
sendto //srcaddr
基于tcp
tcp 客户端:
//建立连接
socket
bind //可选
connect
//通信过程
read
write
close
tcp服务器:
//建立连接
socket
bind
listen //监听客户端的连接请求
accept //这一步完成后 连接就建立好了,之后就可以收发数据
//通信过程
read
write
close
tcp如何建立连接?
tcp三次握手
断开连接
tcp四次回收
tcp客户端:
connect
该函数固定有客户端使用,表示从当前主机向目标主机发起链接请求
参数:
sockfd //本地socket创建的套接字id
addr //远程目标主机的地址信息
addelen //参数addr的长度
返回值:
成功 返回0
失败 返回-1
tcp服务器端:
listen
反应监听那个套接字并且建立成功之后返回一个新的套接字
参数:
sockfd //当前的套接字
backlog //同时可以监听的个数
返回值:
成功 返回0
失败 返回-1
listen会标记下一个被动的socket(这个socket将会被用来接受到来的接受请求)
注意:
其有两个socket
1、监听的socket
2、处理建立连接的socket(后续进行操作的socket)
accept
从监听套接字sockfd的挂起连接队列中提取第一个连接请求,创建一个新的文件描述符,该文件描述符引用这个新套接字。新创建的套接字不处于监听状态。原始套接字sockfd不受此调用的影响
--------------------------------------
嵌入式学习第三十二天,今天讲了UDP剩余部分的内容,了解了两个进程间的通信。还学习了TCP的相关知识,其中包括TCP客户端和服务端的相关知识,以及关于TCP函数的认识和使用。后面继续加油。