C语⾔socket编程----实现UDP通信
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
7int main()
8 {
9//创建socket对象
10int sockfd=socket(AF_INET,SOCK_DGRAM,0);
11
12//创建⽹络通信对象
13struct 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对象与通信链接
19int ret =bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));
20if(0>ret)
21    {
22        printf("bind\n");
23return -1;
24
25    }
26struct sockaddr_in cli;
27    socklen_t len=sizeof(cli);
28
29while(1)
30    {
31char 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    }
socket通信报文格式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
7int main()
8 {
9//创建socket对象
10int sockfd=socket(AF_INET,SOCK_DGRAM,0);
11
12//创建⽹络通信对象
13struct 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
18while(1)
19    {
20        printf("请输⼊⼀个数字:");
21char buf=0;
22        scanf("%hhd",&buf);
23        sendto(sockfd,&buf,
24sizeof(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
29if(66 ==buf)
30        {
31            printf(" server 成功接受\n");
32        }
33else
34        {
35            printf("server 数据丢失\n");
36        }
37
38    }
39    close(sockfd);
40
41 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。