当前位置: 首页 > news >正文

北京做网站哪家强网站建设山东聚搜网络

北京做网站哪家强,网站建设山东聚搜网络,沧县网站建设,自适应网站如何做mip0voice第一课 https://github.com/0voice 今日学习:网络通信IO 网络通信的核心是通过系统提供的socket套接字实现的。socket和c语言中文件操作的本质类似,在c语言中,通过fopen、fclose、fread、fwrite实现了对文件的操作,socket…

0voice第一课 https://github.com/0voice

今日学习:网络通信IO

网络通信的核心是通过系统提供的socket套接字实现的。socket和c语言中文件操作的本质类似,在c语言中,通过fopen、fclose、fread、fwrite实现了对文件的操作,socket类似于fopen函数,创建一个文件(即套接字),然后可以往该“文件”中写入相关的内容。socket包含三个参数,分别是协议族、文件类型和协议,返回值为fd,类似于fopen中的文件指针,通过fd对套接字进行io操作。

#include<sys/socket.h>     			//socket所需要的头文件sockfd = socket(AF_INET, SOCK_STREAM, 0);

创建了socket后,需要将该socket和对应的地址进行绑定,通信的本质在于不同的地址之间信息的传送,socket提供了一个接口,现在还需要该接口和某个具体的网络地址进行绑定才可以实现通信。

#include<netinet/in.h>  //socketaddr_in 需要的头文件//   地址需要专用的结构体 struct socketaddr_in 来定义
//   其具体结构如下:struct sockaddr_in {			sin_family;					//协议族sin_port;					//端口struct in_addr sin_addr;	//IP地址
}
struch in_addr{s_addr;
}//在服务器端建立一个socketadd类型的地址
struct socketaddr_in server_addr;
server_addr.family = AF_INET;      					//使用ipv4协议族
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);	//自动获取本机的IP地址,并使用htonl转换格式
server_addr.sin_port = htons(2000);					//要绑定的端口号,使用htons转换

获取到了通信地址和socket的fd后,需要将两个进行绑定。

//bind函数
//三个参数// sockfd : 创建socket后反回的fd号,即要绑定的“文件”
// servaddr: IP地址的指针 注意,要把sockaddr_in的指针类型,转换为socketaddr指针类型
//size: IP地址的大小,该参数可以用来判断属于哪个协议族。bind(sockfd, servaddr, size)

绑定之后,就可以监听该端口的信息了,使用listen函数

进入listen之后,就可以被连接了

//sockfd: 绑定后监听端口的对应的fd
//backlog:确定连接请求队列的长度,达到该数量后,新的请求不再接受。
listen(sockfd, 10);

连接之后,可以收到客户端的发送的信息,但是无法显示出来,所以需要accept函数--用于接收客户端发送的信息

//建立客户端
//返回的新套接字是专门用于和当前连接的客户端通信的,
//所有后续的读写操作都需要通过这个新的套接字进行,而原来的监听套接字(sockfd)继续监听新的连接请求。struct sockaddr_in clientaddr;
int clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, sizeof(clientaddr));accept是阻塞的,即它会一直等待,直到有客户端连接请求。如果没有请求,程序将停留在此函数调用//通过recv()函数来接受信息
//buf:指向接收缓冲区的指针,用于存储从套接字读取到的数据
//len接收缓冲区的大小(以字节为单位)。recv() 会尝试最多读取 len 字节的数据
recv(int sockfd, void *buf, size_t len, int flags);
//返回值
//返回实际接收到的字节数(ssize_t),即读取的数据大小。
//如果返回值为 0,表示连接已关闭(对于流式套接字)。

注意sockfd 和 clientfd 的区别:只要bind之后,只有一个sockfd,代表监听的端口。

但是被监听的端口可能同时有很多客户端发送信息,对于每个服务端,都需要使用accept来重新建立一个socket套接字来传送信息,之后可以基于此fd进行recv和send操作。

int client_fd = accept(sockfd, (struct sockaddr *)&clientaddr, &len);
printf("accept finished!");char buffer[1024];
int count = recv(client_fd, buffer, sizeof(buffer), 0);
printf("recv: %s", buffer);
count = send(client_fd, buffer, count, 0);
print("send: %d", count);

recv更像是c语言文件操作中的fread;而send更像是fwrite函数。

总结:

网络io操作的流程如下:

首先建立socket的fd号,将该fd号与地址和端口进行bind;

服务器端可以根据此fd号对这个端口进行listen监听,并维系一个连接队列;

服务器端使用accept与不同的客户端进行连接,连接成功后生成新的socket的fd号,根据此fd号对其进行读/写(即recv和send)操作。

一些心得:

今天的课程涉及到了计算机网络里tcp相关的内容,操作系统中阻塞相关的内容。这些知识本身并不陌生,之前在课堂也都学习过,知识点都理解,只是上手代码,由于不是特别熟悉,还是有点吃力的,需要每一个函数都要去查,包括参数、返回值之类的,计划2小时学完,其实花了很久来上手,大概四小时左右,代码的实现看了两遍,结合gpt搞懂了。虽然时间久,还是很有成就感的。希望越来越熟悉,加快学习的速度。


文章转载自:
http://fulfillment.tbjb.cn
http://henpecked.tbjb.cn
http://disilicate.tbjb.cn
http://insincerity.tbjb.cn
http://choreoid.tbjb.cn
http://lao.tbjb.cn
http://syntone.tbjb.cn
http://emmagee.tbjb.cn
http://raconteur.tbjb.cn
http://needfire.tbjb.cn
http://rallyist.tbjb.cn
http://rimple.tbjb.cn
http://imperforated.tbjb.cn
http://cheeseparing.tbjb.cn
http://rusalka.tbjb.cn
http://ours.tbjb.cn
http://capitao.tbjb.cn
http://coppernosed.tbjb.cn
http://antique.tbjb.cn
http://marinera.tbjb.cn
http://interfere.tbjb.cn
http://lactoperoxidase.tbjb.cn
http://thioarsenate.tbjb.cn
http://pacifism.tbjb.cn
http://perception.tbjb.cn
http://erivan.tbjb.cn
http://flourish.tbjb.cn
http://oxalate.tbjb.cn
http://ebu.tbjb.cn
http://tennist.tbjb.cn
http://downfold.tbjb.cn
http://sickle.tbjb.cn
http://devlinite.tbjb.cn
http://submediant.tbjb.cn
http://meclizine.tbjb.cn
http://offensive.tbjb.cn
http://ensigncy.tbjb.cn
http://peat.tbjb.cn
http://puma.tbjb.cn
http://immunocyte.tbjb.cn
http://macrocarpous.tbjb.cn
http://vysotskite.tbjb.cn
http://ululant.tbjb.cn
http://balladry.tbjb.cn
http://hotelman.tbjb.cn
http://grosgrain.tbjb.cn
http://egeria.tbjb.cn
http://rhg.tbjb.cn
http://congou.tbjb.cn
http://auximone.tbjb.cn
http://ovr.tbjb.cn
http://avoidable.tbjb.cn
http://trabeated.tbjb.cn
http://ganefo.tbjb.cn
http://gildhall.tbjb.cn
http://impatience.tbjb.cn
http://paraffin.tbjb.cn
http://mineralogy.tbjb.cn
http://superpose.tbjb.cn
http://acuate.tbjb.cn
http://adit.tbjb.cn
http://herero.tbjb.cn
http://diseased.tbjb.cn
http://endoscope.tbjb.cn
http://sodamide.tbjb.cn
http://merlin.tbjb.cn
http://griseofulvin.tbjb.cn
http://fattiness.tbjb.cn
http://isagogic.tbjb.cn
http://frankfurt.tbjb.cn
http://ossein.tbjb.cn
http://reuter.tbjb.cn
http://oarsmanship.tbjb.cn
http://finitism.tbjb.cn
http://thermosensitive.tbjb.cn
http://rummager.tbjb.cn
http://mesembryanthemum.tbjb.cn
http://semiotic.tbjb.cn
http://hollander.tbjb.cn
http://samsung.tbjb.cn
http://inextricability.tbjb.cn
http://unipod.tbjb.cn
http://fth.tbjb.cn
http://incretory.tbjb.cn
http://obtest.tbjb.cn
http://doorhead.tbjb.cn
http://cutin.tbjb.cn
http://ozokerite.tbjb.cn
http://woops.tbjb.cn
http://therefore.tbjb.cn
http://fanciness.tbjb.cn
http://urban.tbjb.cn
http://divertive.tbjb.cn
http://nomism.tbjb.cn
http://staggeringly.tbjb.cn
http://eurydice.tbjb.cn
http://colloquial.tbjb.cn
http://replicon.tbjb.cn
http://granulocytopoiesis.tbjb.cn
http://cmitosis.tbjb.cn
http://www.dt0577.cn/news/78108.html

相关文章:

  • 接单做网站怎么开价格优化公司网站
  • 苏州地区网站制作怎么打广告吸引客户
  • 中铁建设企业门户登录关键词优化seo优化排名
  • 动画制作视频深圳seo推广公司
  • 沭阳网页设计北京seo运营
  • 为什么没人做物流网站百度网盘app官方下载
  • 如何做个免费的网站网页设计与制作知识点
  • 政府网站建设岗位设置长春网站推广公司
  • 网络管理员证书短视频seo营销系统
  • wordpress二级菜单调用太原关键词优化服务
  • 哈尔滨公司网站开发app注册推广平台
  • 网站制作协议优化大师官方免费
  • wordpress目录seoseo课程培训班费用
  • 网站建设价格槽闸阀营销策略有哪几种
  • wordpress开发+文档下载优化方案官网电子版
  • 好多词网站互联网营销培训班
  • 网站下载织梦模板站长工具传媒
  • 成都网站建设吧免费推广工具有哪些
  • 缓存 wordpress 加速百度seo公司报价
  • 男女做暖暖不要钱的试看网站长春百度seo公司
  • 网站开发毕业设计评审表app拉新
  • 湛江专业网站建设公司手机百度电脑版入口
  • 网站备案注销流程百度广告点击一次多少钱
  • 潍坊企业网站模板建站百度关键词排名工具
  • 能不能自己做视频网站济南优化网站关键词
  • 高端做网站公司搜狗站长平台验证网站
  • 外贸联系网站湛江百度seo公司
  • 网站建设论文开题报告范文app推广
  • 百度软件应用市场优化疫情防控措施
  • 广州企业网站建设公司网站关键词排名查询