Linux 您所在的位置:网站首页 linux编程代码 Linux

Linux

2023-04-02 02:06| 来源: 网络整理| 查看: 265

目录

一、实现的过程

二、代码:

1.ser.c

2.cli.c

三、运行结果

 四、服务器端断开重运行,客户端还能发送吗?(可以)

五、可以同时运行两个客户端吗?(可以) 

六、数据读取 

//不粘包,会丢包

一、实现的过程

 //无连接、不可靠、尽最大的努力发出去,不保证能收到,效率高

UDP:视频传输,eg:打视频电话,处理丢包的成本很低;

二、代码: 1.ser.c #include #include #include #include #include #include #include #include int main() { int sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd==-1) { exit(0); } 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)); while(1) { int len=sizeof(caddr); char buff[128]={0}; int n=recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len); printf("ip:%s,buff=%s\n",inet_ntoa(caddr.sin_addr),buff); sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr)); } } 2.cli.c #include #include #include #include #include #include #include #include int main() { int sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd==-1) { exit(0); } 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)); while(1) { int len=sizeof(caddr); char buff[128]={0}; int n=recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len); printf("ip:%s,buff=%s\n",inet_ntoa(caddr.sin_addr),buff); sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr)); } } 三、运行结果

 四、服务器端断开重运行,客户端还能发送吗?(可以)

udp是无连接的,服务器端断开,客户端并不知道,只看端口,哪怕不运行,也发出去了,是不过数据丢失

五、可以同时运行两个客户端吗?(可以) 

无连接,只要有人发,就会接收,可以直接接受来自于很多客户端的数据

六、数据读取 

sendto:不能保证目的地址一样,

如果没有把数据报内容收完,那么其余数据丢失,

再次接受的时候是下一个数据报

第一次发送的数据包是一个独立个体,接受完就结束,没接收完,剩下的也丢了

//不粘包,会丢包

 将接收大小由127改成1,一次只接受一个



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有