大家好,又见面了,我是你们的朋友全栈君。
UDP 提供的是无连接、不可靠的、数据报服务。编程流程如下:
socket()方法用来创建套接字,使用udp协议时,选择数据报服务SOCK_DGRAM。 sendto()方法用来发送数据,由于 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