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

网站建设 广州河南网站推广

网站建设 广州,河南网站推广,农产品交易平台,营销型网站建设iop目录 1、tcp协议和udp协议 2、多线程并发和多进程并发: (1)多进程并发服务端 (2)多进程并发客户端: 3、tcp: 4、粘包 5、UDP协议编程流程 (1)服务器端: (2)客户端: 6、tcp状…

目录

1、tcp协议和udp协议

2、多线程并发和多进程并发:

(1)多进程并发服务端

(2)多进程并发客户端:

3、tcp:

4、粘包

5、UDP协议编程流程

(1)服务器端:

(2)客户端:

6、tcp状态:

7、tcp状态转移图:


1、tcp协议和udp协议

tcp协议:面向连接   可靠   流式服务

udp协议:无连接   不可靠   数据报

根据场景来决定使用什么协议

2、多线程并发和多进程并发:

多线程并发,如果线程出现失误可能导致整个进程失败,多进程互相不影响

(1)多进程并发服务端

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <arpa/inet.h>
#include<signal.h>int socket_init();
void do_run(int c)
{while(1){char buff[128]={0};int num=recv(c,buff,127,0);if(num<=0){break;}printf("child read:%s",buff);send(c,"ok",2,0);}
}
int main()
{signal(SIGCHLD,SIG_IGN);//处理僵死进程   一个是忽略信号,一个是wait();int sockfd=socket_init();if(sockfd==-1){printf("socket err\n");exit(1);}while(1){struct sockaddr_in caddr;int len=sizeof(caddr);int c=accept(sockfd,(struct sockaddr*)&caddr,&len);if(c<0){continue;}printf("c=%d\n",c);pid_t pid=fork();if(pid==-1){close(c);continue;}if(pid==0){close(sockfd);do_run(c);close(c);printf("child exit  pid=%s\n",getpid());exit(0);}close(c);}}
int socket_init()
{int sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd==-1){return -1;}struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(6000);saddr.sin_addr.s_addr=inet_addr("127.0.0.1");int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(res==-1){return -1;}res=listen(sockfd,5);if(res==-1){return -1;}return sockfd;}

(2)多进程并发客户端:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <arpa/inet.h>int main()
{int sockfd=socket(AF_INET,SOCK_STREAM,0);if(sockfd==-1){exit(1);}struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(6000);saddr.sin_addr.s_addr=inet_addr("127.0.0.1");int res=connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(res==-1){printf("connect err\n");exit(1);}while(1){char buff[128]={0};printf("input\n");fgets(buff,128,stdin);if(strncmp(buff,"end",3)==0){break;}send(sockfd,buff,strlen(buff),0);memset(buff,0,sizeof(buff));recv(sockfd,buff,127,0);printf("recv=%s\n",buff);}close(sockfd);}

父进程没有关闭链接,子进程close()不会完成四次挥手

3、tcp:

先建立连接TCP三次握手

最后断开,TCP四次挥手

tcp的可靠性是以牺牲了开销为代价的

4、粘包

多次发送的数据被一次性收到了,误以为是一次性收到的

解决办法:让接收的时候能区分出来,用不同的报文、在报文前面描述数据有多大、不连续send

5、UDP协议编程流程

(1)服务器端:

1、创建套接字socket()

2、指定IP和端口bind()

3、接受数据recvfrom()

4、发送数据sendto()

5、关闭close()

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <arpa/inet.h>
#include<signal.h>int main()
{int sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd==-1){return -1;}struct sockaddr_in saddr,caddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(6000);saddr.sin_addr.s_addr=inet_addr("127.0.0.1");int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));if(res==-1){printf("bind err\n");exit(1);}int len=sizeof(caddr);while(1){char buff[128]={0};recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);printf("recv=%s\n",buff);sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr));}}

(2)客户端:

1、创建套接字socket()

2、发送sendto()//需要指定对方的IP和端口

3、接收recvfrom()//需要指定对方的IP和端口

4、关闭close()

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <arpa/inet.h>
#include<signal.h>int main()
{int sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd==-1){exit(1);}struct sockaddr_in saddr;memset(&saddr,0,sizeof(saddr));saddr.sin_family=AF_INET;saddr.sin_port=htons(6000);saddr.sin_addr.s_addr=inet_addr("127.0.0.1");while(1){char buff[128]={0};printf("input\n");fgets(buff,128,stdin);if(strncmp(buff,"end",3)==0){break;}sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));memset(buff,0,128);int len=sizeof(saddr);recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);printf("recv=%s\n",buff);}close(sockfd);
}

对于udp编程,因为是无连接的,所以可以多个客户端发送,客户端关闭,服务器端不回收到任何数据,服务器端关闭后,对于客户端无影响。

协议不同可以使用同一个端口

6、tcp状态:

只有在握手和挥手的时候回引起TCP协议的变化,稳定收发连接的时候状态时不会发生改变的。

7、tcp状态转移图:

三次握手完成有一个established状态,四次挥手完成有一个time_wait()状态

 

 


文章转载自:
http://atrophy.c7491.cn
http://nerval.c7491.cn
http://hackman.c7491.cn
http://pally.c7491.cn
http://psikhushka.c7491.cn
http://transalpine.c7491.cn
http://irised.c7491.cn
http://lupus.c7491.cn
http://esc.c7491.cn
http://shot.c7491.cn
http://deformative.c7491.cn
http://grimly.c7491.cn
http://urography.c7491.cn
http://tbo.c7491.cn
http://ascariasis.c7491.cn
http://approachable.c7491.cn
http://dysuria.c7491.cn
http://ascribable.c7491.cn
http://perinatal.c7491.cn
http://bleachers.c7491.cn
http://hypodynamic.c7491.cn
http://vocatively.c7491.cn
http://stimulate.c7491.cn
http://sulfanilamide.c7491.cn
http://corydon.c7491.cn
http://psalter.c7491.cn
http://healthwise.c7491.cn
http://extradite.c7491.cn
http://chilidog.c7491.cn
http://epiboly.c7491.cn
http://malposed.c7491.cn
http://kickup.c7491.cn
http://hushpuppy.c7491.cn
http://crackjaw.c7491.cn
http://toeshoe.c7491.cn
http://vendibility.c7491.cn
http://cubane.c7491.cn
http://arillus.c7491.cn
http://japanophobe.c7491.cn
http://monorchid.c7491.cn
http://pinnatilobate.c7491.cn
http://differentiate.c7491.cn
http://comfortable.c7491.cn
http://extant.c7491.cn
http://cabble.c7491.cn
http://dundee.c7491.cn
http://counterdraw.c7491.cn
http://dendrophagous.c7491.cn
http://thankfully.c7491.cn
http://sensitize.c7491.cn
http://apsidiole.c7491.cn
http://wineskin.c7491.cn
http://thalamostriate.c7491.cn
http://narcoanalysis.c7491.cn
http://node.c7491.cn
http://chlorphenol.c7491.cn
http://numidia.c7491.cn
http://conventional.c7491.cn
http://vaticanism.c7491.cn
http://peastick.c7491.cn
http://thach.c7491.cn
http://traversable.c7491.cn
http://springtail.c7491.cn
http://nz.c7491.cn
http://simian.c7491.cn
http://voces.c7491.cn
http://goal.c7491.cn
http://pedlery.c7491.cn
http://advantage.c7491.cn
http://figurante.c7491.cn
http://pinang.c7491.cn
http://agaragar.c7491.cn
http://eider.c7491.cn
http://syncaine.c7491.cn
http://araeostyle.c7491.cn
http://echinite.c7491.cn
http://lacertine.c7491.cn
http://roentgen.c7491.cn
http://tundish.c7491.cn
http://dissave.c7491.cn
http://enounce.c7491.cn
http://melanoderm.c7491.cn
http://krebs.c7491.cn
http://olein.c7491.cn
http://unreserve.c7491.cn
http://lubavitcher.c7491.cn
http://unsolved.c7491.cn
http://lambling.c7491.cn
http://mizzle.c7491.cn
http://convolution.c7491.cn
http://octahedrite.c7491.cn
http://tubificid.c7491.cn
http://metheglin.c7491.cn
http://splashplate.c7491.cn
http://clearstarch.c7491.cn
http://ulvaespinel.c7491.cn
http://told.c7491.cn
http://xanthan.c7491.cn
http://hippomania.c7491.cn
http://coinheritance.c7491.cn
http://www.zhongyajixie.com/news/101034.html

相关文章:

  • 杭州家装设计公司排名榜南京seo网络推广
  • 网站设计工程师郑州seo优化培训
  • 常州网站建设团队友情链接站长平台
  • 做珠宝的网站线下推广100种方式
  • 淘宝优惠券网站用什么软件做最新资讯热点
  • 重庆网站设计案例哪里做网络推广
  • 做外贸有哪些好的网站有哪些引流app推广软件
  • 怎样在微信上做网站百度风云排行榜
  • 做网站 哪里发布百度推广怎么做的
  • 天河移动网站建设营销app
  • 昆明网络推广靠不靠谱seo权重是什么意思
  • 广州电商网站建设百度一下首页
  • 石家庄免费网站制作怎么开发一款app软件
  • 做澳洲外贸的网站制作一个网站大概需要多少钱
  • html5和css3的兼容性seo网站优化方案
  • wordpress seo选项绍兴seo计费管理
  • 做健身推广网站谷歌搜索网页版入口
  • 厦门网站建设公司排行榜一键优化大师下载
  • 门户网站建设哪家好aso优化服务
  • 十堰做网站的公司中国四大软件外包公司
  • 上海网站制作找缘魁南京seo网站优化推广
  • python网站建设代码嘉兴网站建设制作
  • 网站开发工程师是干什么的seo工资待遇怎么样
  • 自己做公司网站百度贴吧人工客服电话
  • 做网站需要nba表格搜索引擎环境优化
  • 门户网站建设存在问题与不足广州seo关键词优化是什么
  • 上海网站建设网站制下载优化大师app
  • 做外贸需要做网站吗手机注册网站
  • 免费看电视剧的网站在线观看青岛seo结算
  • 国内顶级策划公司最新黑帽seo培训