#include
#include
ssize_t sendto(int socketfd,const void* buf,size_t len,int flags,const struct sockaddr *dest_addr,socklen_t addrlen);
-参数:
-sockfd:通信后的fd
-buf:要发送的数据
-len:发送数据的长度
-flags:0
-dest_addr:通信的另外一端的地址信息
-addrlen:地址的内存大小
ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen);
-参数:
-sockfd:通信的fd
-buf:接收数据的数据
-len:数据的大小
-flags:0
-src_addr:用来保存另外一端的地址信息,不需要可以指定为NULL
-addrlen:地址的内存大小
相关的代码是实现为:
服务器端
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main()
7 {
8 //1、创建一个socket
9 int fd=socket(AF_INET,SOCK_DGRAM,0);
10 if(fd==-1)
11 {
12 perror("socket");
13 exit(-1);
14 }
15 //2、绑定
16 struct sockaddr_in saddr;
17 saddr.sin_family=AF_INET;
18 saddr.sin_port=htons(9999);
19 saddr.sin_addr.s_addr=INADDR_ANY;
20 int ret=bind(fd,(struct sockaddr*)&saddr,sizeof(saddr));
21 if(ret==-1)
22 {
23 perror("bind");
24 exit(-1);
25 }
26 //3、通信
27 while(1)
28 {
29 char recvbuf[128];
30 char ipbuf[16];
31 struct sockaddr_in cliaddr;
32 int len=sizeof(cliaddr);
33 //接收数据
34 int num=recvfrom(fd,recvbuf,sizeof(recvbuf),0,(struct sockaddr*)&cliaddr,&len);
35 if(num==-1)
36 {
37 perror("recvfrom");
38 exit(-1);
39 }
40 printf("client IP:%s,Port:%d\n",inet_ntop(AF_INET,&cliaddr.sin_addr.s_addr,ipbuf,sizeof(ipbuf)),ntohs(cliaddr.sin_port));
41
42 printf("client say:%s\n",recvbuf);
43 //发送数据
44 sendto(fd,recvbuf,strlen(recvbuf)+1,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
45 }
46 close(fd);
47 return 0;
48 }
客户端
1 #include
2 #include
3 #include
4 #include
5 #include
6 int main()
7 {
8 //1、socket
9 int fd=socket(AF_INET,SOCK_DGRAM,0);
10 //2、通信
11 struct sockaddr_in saddr;
12 saddr.sin_family=AF_INET;
13 saddr.sin_port=htons(9999);
14 inet_pton(AF_INET,"192.168.17.134",&saddr.sin_addr.s_addr);
15 int num=0;
16 while(1)
17 {
18 char sendbuf[128];
19 sprintf(sendbuf,"hello,i am shirui %d\n",num++);
20 struct sockaddr_in cliaddr;
21 int len=sizeof(cliaddr);
22 //2、发送数据
23 sendto(fd,&sendbuf,strlen(sendbuf)+1,0,(struct sockaddr*)&saddr,sizeof(saddr));
24 //3、接收数据
25 recvfrom(fd,&sendbuf,sizeof(sendbuf),0,NULL,NULL);
26 printf("server say:%s\n",sendbuf);
27 sleep(1);
28 }
29 close(fd);
30 return 0;
31 }
32
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)