tcp的TIME_WAIT存在的意义
可靠地终止TCP连接
保证让迟来的TCP报文段有足够的时间被识别并丢弃
挥手可以是3次但是握手必须为3次
udp无连接 不可靠 数据报
实时性用udp,可靠性用TCP
udp可以和TCP使用同意端口且同时运行,因为UDP无状态,收发数据时可以分清是那个协议
同一个进程可以创建多个套接字
代码:
服务端代码
#include#include #include #include #include #include #include #include int main() { int sockfd=socket(AF_INET,SOCK_DGRAM,0); SOCK_DGRAM代表是udp协议 assert(sockfd!=-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("127.0.0.1"); int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); assert(res!=-1); while(1) { int len=sizeof(caddr); char buff[128]={0}; recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len); printf("buff=%sn",buff); sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr)); } }
客户端代码
#includehttp#include #include #include #include #include #include #include int main() { int sockfd=socket(AF_INET,SOCK_DGRAM,0); SOCK_DGRAM代表是udp协议 assert(sockfd!=-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("127.0.0.1"); while(1) { char buff[128]={0}; fgets(buff,128,stdin); if(strncmp(buff,"end",3)==0) { break; } sendto(sockfd,buff,strlen(buff)-1,0,(struct sockaddr*)&saddr,sizeof(saddr)); memset(buff,0,128); int len=sizeof(saddr); recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len); printf("buff=%sn",buff); } close(sockfd); }
http应用层协议,默认使用端口80
tcp:传输层协议
http短链接:浏览器发送请求,服务器回复应答报文,后关闭
http长链接:发送回复再发送再回复,多次
在浏览器中输入网址(域名),通过DNS将域名转为ip地址(也就是申请的服务器ip),然后三次握手链接,浏览器发送http请求报文,服务器回复应答报文
https更安全(加密)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)