[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
<>1、创建套接字
#include <sys/socket.h> int socket(int domain,int type,int protocol);
* domain:套接字中使用的协议族(protocol family)信息
* type:套接字数据传输类型信息
* protocol:计算机间通信中使用的协议信息
<>2、协议族
* 常用PF_INET,即ipv4
<>3、套接字类型
(1)面向连接的套接字(SOCK_STREAM)
* 特点:
* 传输过程中数据不会消失
* 按序传输数据
* 传输的数据不存在数据边界:即接收端存在缓冲区,多次写入缓冲区的数据,接收端可能一次就能读完(即传输数据次数和接收数据次数可以不一样)
* 一一对应,基于字节传输
套接字缓冲满是否意味数据丢失?
* 当套接字缓冲满时,传输端停止传输,也就是说面向连接的套接字会根据接收端的状态传输数据。
* 若传输出错还会提供重传服务,故除特殊情况外不会发生数据丢失
(2)面向消息的套接字(SOCK_DGRAM)
* 特点:
* 强调快速传输而非传输顺序(故速度比面向连接快,且不按序)
* 传输数据可能丢失也可能损毁
* 传输数据有数据边界(接收数据次数和传输次数相同)
* 限制每次传输的数据大小
<>4、协议最终选择
* 一般情况下,传递前两个参数既可创建所需套接字,故可以直接传0.
* 但是可能出现在同一协议族中存在多个数据传输方式相同的协议,此时就要传入第三个参数具体指定协议信息。
* 例: //创建ipv4版tcp连接socket int tcp_socket=socket(PF_INET,SOCK_STREAM,
IPPROTO_TCP);//IPPROTO_TCP可以直接写0 //创建ipv4版udp连接socket int udp_socket=socket(
FP_INET,SOCK_STREAM,IPPROTO_UDP);
<>5、习题
* 什么是协议?在收发数据中定义协议有何意义?
协议就是为了完成数据交换而定好的约定。因此,定义协议意味着对数据传输所必需的的承诺进行定义。
* 面向连接的TCP套接字传输特性有3点,请分别说明.
* 有序传输
* 数据传输时没有数据边界
* 传输过程中数据不会消失
* 何种类型的套接字不存在数据边界?这类套接字接收数据时需要注意什么?
面向连接的套接字不存在数据边界。因此输入输出函数的响应次数不具有意义。重要的不是函数的响应次数,而是数据的收发量
。因此,必须将传输数据的量和接收数据的量制作成编码,保证发送数据的量和接收数据的量是一致的,特别要注意是制作依赖函数响应次数判断代码