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

查找邮箱注册过的网站大连网站优化

查找邮箱注册过的网站,大连网站优化,云浮新增病例详情,网站做公安部备案需要测评吗网络编程模型 c/s 模型:客户端服务器模型b/s 模型:浏览器服务器模型1.tcp网络流程 服务器流程: 1.创建套接字2.完善服务器网络信息结构体3.绑定服务器网络信息结构体4.让服务器处于监听状态5.accept阻塞等待客户端连接信号6.收发数据7.关闭套…

网络编程模型

    c/s 模型:客户端服务器模型b/s 模型:浏览器服务器模型

1.tcp网络流程

在这里插入图片描述
服务器流程:

    1.创建套接字2.完善服务器网络信息结构体3.绑定服务器网络信息结构体4.让服务器处于监听状态5.accept阻塞等待客户端连接信号6.收发数据7.关闭套接字

客户端流程:

    1.创建套接字2.连接connect3.收发数据4.关闭套接字

2.函数

2.1socket

#include <sys/types.h>          
#include <sys/socket.h>int socket(int domain, int type, int protocol);
功能:创建套接字参数:domain:通信域Name                                 Purpose                                                Man pageAF_UNIX,AF_LOCAL          Local communication(本地通信)          unix(7)AF_INET                             IPv4 Internet protocols                         ip(7)AF_INET6                           IPv6 Internet protocols                         ipv6(7)AF_PACKET                        原始套接字                                          packet(7)type:套接字的类型SOCK_STREAM            TCPSOCK_DGRAM              UDP使用SOCK_RAW                    原始套接字使用protocol:附加文件,没有写0返回值:成功:创建的新套接字(文件描述符)失败:-1  重置错误码

2.2bind

#include <sys/types.h>          
#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:绑定套接字和网络信息结构体参数:sockfd:socket函数产生的套接字文件描述符(socket函数返回值)addr:避免冲突警告

2.3listen

#include <sys/types.h>          
#include <sys/socket.h>int listen(int sockfd, int backlog);产生半连接队列功能:将套接字设置成被动监听状态,只有这个状态的套接字才能等待客户端连接参数:sockfd:socket函数返回值backlog:半连接队列的长度,一般传 5 10 都行 不是0就行返回值:成功:0失败:-1  重置错误码

accept

#include <sys/types.h>          
#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);产生全连接队列,返回值创                                                                                                        建的文件描述符
功能:提取半连接队列中的第一个客户端连接,成功,放到函数产生的全连接队列中,专门             用于和当前客户端通信,返回的套接字和原套接字类型相同参数:sockfd:listen后的sockfdaddr:客户端的网络信息结构体首地址,不关心写NULLaddrlen:客户端addr长度,不关心写NULL返回值:成功:创建的新的文件描述符  专门用于和当前客户端通信失败:-1  重置错误码

connect

#include <sys/types.h>          
#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);功能:与服务器建立连接 参数:sockfd:accept函数返回值addr:服务器的网络信息结构体addrlen:addr的长度返回值:成功:0失败:-1  重置错误码

服务器代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <arpa/inet.h>
#define ERRLOG(msg) do{\printf("%s %s %d\n", __FILE__, __func__, __LINE__);\perror(msg);\exit(-1);\}while(0)int main(int argc, char const *argv[])
{//1.创建套接字int sockfd=0;//需要接函数返回值,后面函数会用if(-1==(sockfd=socket(AF_INET,SOCK_STREAM,0))){ERRLOG("socket error");}//2.服务器网络信息结构体填充//struct sockaddr addr;struct sockaddr_in ad;memset(&ad, 0, sizeof(ad));ad.sin_family=AF_INET;ad.sin_port=htons(7788);//自己随意指定,不冲突就行,冲突就换ad.sin_addr.s_addr=inet_addr("192.168.250.100");//3.绑定套接字和服务器网络信息结构体if(-1==bind(sockfd,(struct sockaddr*)&ad,sizeof(ad))){ERRLOG("bind error");}//4.让套接字处于被动监听状态if(-1==listen(sockfd,5)){ERRLOG("listen error");}//5.阻塞等待客户端连接printf("正在等待客户端发来信息\n");int newfd=0;if((newfd=accept(sockfd,NULL,NULL))==-1){ERRLOG("accept error");}printf("客户端连接成功\n");//6.收发数据char buff[128]={0};int lnum=0;char opr=0;int rnum=0;int result=0;read(newfd,buff,128);printf("客户端发来数据:%s\n",buff);sscanf(buff,"%d%c%d",&lnum,&opr,&rnum);switch(opr){case '+':result=lnum+rnum;break;case '-':result=lnum-rnum;break;case '*':result=lnum*rnum;break;case '/':result=(float)lnum/(float)rnum;break;}memset(buff,0,128);sprintf(buff,"result=%d",result);write(newfd,buff,128);//7.关闭套接字close(sockfd);close(newfd);return 0;
}

客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <arpa/inet.h>#define ERRLOG(msg) do{\printf("%s %s %d\n", __FILE__, __func__, __LINE__);\perror(msg);\exit(-1);\}while(0)int main(int argc, char const *argv[])
{//创建套接字int sockfd=0;if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){ERRLOG("socket error");}//填充服务器结构体struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(6666);addr.sin_addr.s_addr=inet_addr("192.168.2.84");//连接服务器if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr))==-1){ERRLOG("connect error");}//收发数据char buff[128]={0};//写入的数据从终端获取fgets(buff,128,stdin);buff[strlen(buff)-1]='\0';write(sockfd,buff,128);memset(buff,0,128);read(sockfd,buff,128);printf("服务器发来的信息是:%s\n",buff);//7.关闭套接字close(sockfd);return 0;
}

send

#include <sys/types.h>          
#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t len, int flags);ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);功能:发送数据参数:sockfd:accept函数返回值buf:要发送的数据的缓冲区首地址len:要发送数据的长度flags:发送的标志位,0用法和write就一样了,MSG_DONTWAIT 表示非阻塞返回值:成功:实际发送的字节数失败:-1  重置错误码注意:如果对方关闭了套接字或者断开连接第一次send没有反应,第二次send会产生SIGPIPE信号下面三种用法是等价的:write(sockfd, buf, 128);send(sockfd, buf, 128, 0);sendto(sockfd, buf, 128, 0, NULL, NULL);

recv

#include <sys/types.h>          
#include <sys/socket.h>ssize_t recv(int sockfd, void *buf, size_t len, int flags);ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);功能:接收数据 参数:sockfd:accept函数返回值buf:要接收的数据的缓冲区首地址len:要接收数据的长度flags:发送的标志位,flags:接收的标志位,0用法和read就一样了,                                                   MSG_DONTWAIT 表示非阻塞返回值:成功:实际接收的字节数失败:-1  重置错误码注意: 如果对方关闭了套接字或者断开连接 recv 会返回0下面三种用法是等价的:read(sockfd, buf, 128);recv(sockfd, buf, 128, 0);recvfrom(sockfd, buf, 128, 0, NULL, NULL);

粘包问题产生原因

tcp在传输的时候不是一调用send就直接将数据发送给客户端的,而是将数据放到发送缓冲区里

tcp底层的nagle算法,会将一定短时间内发送的数据包组装成一个整体,发送给对方

而接受方无法区分消息的边界和类型,就可能会导致有冲突的情况发生

也就是说,当文件只剩最后一部分的时候,很有可能将最后的结束字符和文件最后一部分作为一个整体发送给接收方,也有可能将三个128和最后的30+12一起发给接收方,但不管是哪种方式,接收方写入的时候是以128为单位接受的,所以接收方缓冲区里是无法单独比较over的,所以会产生粘包问题。

解决方法:

1.既然是一定短时间内的数据成为一个整体,那么最后发送的over就不和前面一块发送了,在over之前加一个延时函数,让他单独发送

但是不常用,因为服务器里禁止使用sleep

2.发送定长的数据包,

解决方法一代码

http://www.hkea.cn/news/909093/

相关文章:

  • 济南做网站优化价格百度推广网站一年多少钱
  • 做网上商城网站哪家好杭州seo靠谱
  • 做营销网站制作关键词优化课程
  • 网站移动终端建设口碑营销成功案例
  • 美国做试管婴儿 网站推广普通话宣传语
  • 网站备案信息查询系统软文发布平台媒体
  • 泊头哪给做网站的好制作网页的教程
  • 漳州建设银行网站首页在百度上打广告找谁
  • 网站免费建站k网络营销策划方案书
  • 网站建设类公网店推广的作用
  • 安平做网站除了百度指数还有哪些指数
  • 做网站公司 蓝纤科技知乎怎么申请关键词推广
  • 临沂免费做网站发表文章的平台有哪些
  • 网站推广的方式包括哪些广西网站建设制作
  • 杭州营销网站建设东莞网站建设哪家公司好
  • 企业做营销型网站手机如何制作网页
  • 连云港网站关键词优化seo自学教程
  • 网站全站出售淘宝关键词排名怎么查询
  • 龙口市规划建设局网站查询收录
  • 学校网站建设注意什么东莞网站营销推广
  • 网站设计模板是什么百度网盘人工客服电话多少
  • wordpress文章收缩长春seo优化企业网络跃升
  • 网站地图调用希爱力双效片骗局
  • 珠海网站建设维护友情链接买卖代理
  • 武汉企业网站推广外包网络广告营销案例分析
  • 深圳哪里有做网站的汕头seo排名收费
  • 如何用腾讯云主机做网站株洲发布最新通告
  • 中国建设银行官网站下载信息流广告投放公司
  • 合肥建站平台网络平台推广是干什么
  • 黄冈工程建设标准造价信息网优化工作流程