C语言socket编程----实现UDP通信

本文介绍了TCP/IP协议族中的UDP协议及其应用场景,并提供了基于C语言的UDP服务端和客户端通信的详细实现代码,帮助读者理解UDP协议的工作原理及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP/IP协议叫做传输控制/网际协议,又叫做网络通信协议。实际上,它包括上百个功能的协议。

套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式。

套接字分为三类;

流式socket(SOCK_STREAM):提供可靠,面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。

数据报socket(SOCK_DGRAM):数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,无序的,并且不保证可靠,无差错的。它使用的数据报协议是UDP。

原始socket:原始套接字允许对底层协议如TP或ICMP进行直接访问,它功能强大但使用复杂,主要用于一些协议的开发。

下面是UDP通信的demo:

 //socket udp 服务端
1
#include<stdio.h> 2 #include<unistd.h> 3 #include<sys/types.h> 4 #include<sys/socket.h> 5 #include<arpa/inet.h> 6 7 int main() 8 { 9 //创建socket对象 10 int sockfd=socket(AF_INET,SOCK_DGRAM,0); 11 12 //创建网络通信对象 13 struct sockaddr_in addr; 14 addr.sin_family =AF_INET; 15 addr.sin_port =htons(1324); 16 addr.sin_addr.s_addr=inet_addr("127.0.0.1"); 17 18 //绑定socket对象与通信链接 19 int ret =bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)); 20 if(0>ret) 21 { 22 printf("bind\n"); 23 return -1; 24 25 } 26 struct sockaddr_in cli; 27 socklen_t len=sizeof(cli); 28 29 while(1) 30 { 31 char buf =0; 32 recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,&len); 33 printf("recv num =%hhd\n",buf); 34 35 buf =66; 36 sendto(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&cli,len); 37 38 } 39 close(sockfd); 40 41 }
 //socket udp 客户端
1
#include<stdio.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<unistd.h> 5 #include<arpa/inet.h> 6 7 int main() 8 { 9 //创建socket对象 10 int sockfd=socket(AF_INET,SOCK_DGRAM,0); 11 12 //创建网络通信对象 13 struct sockaddr_in addr; 14 addr.sin_family =AF_INET; 15 addr.sin_port =htons(1324); 16 addr.sin_addr.s_addr = inet_addr("192.168.0.143"); 17 18 while(1) 19 { 20 printf("请输入一个数字:"); 21 char buf=0; 22 scanf("%hhd",&buf); 23 sendto(sockfd,&buf, 24 sizeof(buf),0,(struct sockaddr*)&addr,sizeof(addr)); 25 26 socklen_t len=sizeof(addr); 27 recvfrom(sockfd,&buf,sizeof(buf),0,(struct sockaddr*)&addr,&len); 28 29 if(66 ==buf) 30 { 31 printf(" server 成功接受\n"); 32 } 33 else 34 { 35 printf("server 数据丢失\n"); 36 } 37 38 } 39 close(sockfd); 40 41 }

 

转载于:https://www.cnblogs.com/leezheng/p/8030011.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值