socket网络编程——UDP编程流程「建议收藏」

2022-10-02 16:14:15 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

UDP 提供的是无连接、不可靠的、数据报服务。编程流程如下:

socket()方法用来创建套接字,使用udp协议时,选择数据报服务SOCK_DGRAMsendto()方法用来发送数据,由于 UDP 是无连接的,每次发送数据都需要指定对端的地址(IP 和端口)。 recvfrom()方法接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。 recvfrom()方法可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客户端的数据。 UDP服务端代码

代码语言:javascript复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main()
{ 

int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert(sockfd != -1);
struct sockaddr_in saddr,caddr;
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));
assert(res != -1);
while(1)
{ 

int len = sizeof(caddr);
char buff[128] = { 
0};
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);
printf("ip:%s port:%d buff = %sn",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port),buff);
sendto(sockfd,"OK",2,0,(struct sockaddr*)&caddr,len);
}
close(sockfd);
exit(0);
}

UDP客户端代码

代码语言:javascript复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main()
{ 

int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert(sockfd != -1);
struct sockaddr_in saddr;
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");
while(1)
{ 

char buff[128] = { 
0};
printf("please inut:n");
fgets(buff,128,stdin);
if(strncmp(buff,"end",3) == 0)
{ 

break;
}
sendto(sockfd,buff,strlen(buff)-1,0,(struct sockaddr*)&saddr,sizeof(saddr));
memset(buff,0,128);
int len = sizeof(saddr);
recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
printf("buff = %sn",buff);
}
exit(0);
}

运行结果 (一个服务端,打开两个客户端):

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/197420.html原文链接:https://javaforall.cn

0 人点赞