TCP与UDP的区别
TCP(传输控制协议):
1、面向连接,有连接三次握手,断开四次握手的过程。
2、以字节流的形式传输,传输有序可靠的数据。
3、大型文件的传输,保证文件的有序性,可靠性。
4、传输速度较慢,但是可靠性高。
UDP(用户数据包协议):
1、面向无连接,以数据报形式传输。
2、传输不保证有序,也有可能丢失(传输过快,缓冲区未接受导致丢包)
3、适合实时信息的传输,用于轻量级的数据传输,如视频通信,QQ通信,丢包则重传,稍微的不可靠性不影响效果。
4、传输速度快,但是可靠性低。
UDP通信模型:
代码实现:
#include<stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include<stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<string.h>
int main()
{
//1.创建socket
int sockfd=socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd==-1)
{
perror("socket fail");
exit(-1);
}
//2.
struct sockaddr_in sndAddr;
memset(&sndAddr,'\0',sizeof(sndAddr));
sndAddr.sin_family=AF_INET;
sndAddr.sin_port=htons(10087);//设置端口号
sndAddr.sin_addr.s_addr=inet_addr("192.168.6.101");//设置IP地址
char buf[1024]="hello";
int addrlen=sizeof(sndAddr);
int res=sendto(sockfd, buf, sizeof(buf), 0,(struct sockaddr*)&sndAddr, addrlen);
if(res==-1)
{
perror("sendto fail");
exit(-1);
}
if(res==-1)
//3.关闭
close(sockfd);
return 0;
}
#include<stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include<stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<string.h>
int main()
{
//1.创建socket
int sockfd=socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd==-1)
{
perror("socket fail");
exit(-1);
}
//2.绑定IP地址
struct sockaddr_in recvAddr;
memset(&recvAddr,'\0',sizeof(recvAddr));
recvAddr.sin_family=AF_INET;
recvAddr.sin_port=htons(10087);//设置端口号
recvAddr.sin_addr.s_addr=inet_addr("192.168.6.101");//设置IP地址
int res=bind(sockfd,(struct sockaddr *)&recvAddr,sizeof(recvAddr));
if(res==-1)
{
perror("bind fail");
return -1;
}
//3.接收数据
char buf[1024]={0};
struct sockaddr_in sendAddr;
int addrlen=sizeof(sendAddr);
res= recvfrom(sockfd, buf,sizeof(buf), 0,
(struct sockaddr *)&sendAddr, &addrlen);
if(res==-1)
{
perror("reccvfrom fail");
return -1;
}
char* ip=inet_ntoa(sendAddr.sin_addr);
printf("I have recv %s message %s,the total bytes is %d\n",ip,buf,res);
//4.关闭
close(sockfd);
return 0;
}