版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fyq201749/article/details/75216097
udp传输数据不需要像tcp一样建立连接,只需要知道客户端和服务器的ip地址即可。首先是服务器端,初始化套接字结构地址,创建套接字,绑定端口,循环监听。
#include <stdio.h>
#include <stdlib.h>// 基本头文件
#include <sys/socket.h>//socket
#include <netinet/in.h>//struct sockaddr_in
#include <string.h>//strlen()函数
int main(int argc,char ** argv){
int sockfd,n;
char rcv[100],send[100];//接受和发送数据的数组
struct sockaddr_in server,client;//服务器和客户端结构地址
socklen_t len;
bzero(&server,sizeof(server));//初始化服务器结构地址
server.sin_family = AF_INET;//ipv4版本
server.sin_port = htons(4399);//端口号
server.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY是本机地址
sockfd = socket(AF_INET,SOCK_DGRAM,0);//创建套接字
bind(sockfd,(struct sockaddr *)&server,sizeof(server));//绑定端口
for(;;){
len = sizeof(client);
n = recvfrom(sockfd,rcv,100,0,(struct sockaddr*)&client,&len);//接受数据并获得客户端地址
rcv[n] = '0';
printf("%s\n",rcv);
sendto(sockfd,rcv,n,0,(struct sockaddr*)&client,len);//发送数据
}
}
客户端,初始化套接字结构地址,指定主机ip,循环发送接收数据
#include <stdio.h>
#include <stdlib.h>// 基本头文件
#include <sys/socket.h>//socket
#include <string.h>//strlen()函数
#include <netinet/in.h>//struct sockaddr_in
#include <unistd.h>
#include <arpa/inet.h>//inet_pton()函数
int main(int argc,char ** argv){
int sockfd,n;
struct sockaddr_in server;//服务器结构地址
char rcv[100],send[100];//接受和发送数据的数组
if(argc!=2){//输入 ip
printf("ip\n");
return 0;
}
bzero(&server,sizeof(server));//初始化sockaddr_in
server.sin_family = AF_INET;//ipv4版本
server.sin_port = htons(4399);//端口号
inet_pton(AF_INET,argv[1],&server.sin_addr.s_addr);//将从键盘传入的IP参数赋值给&server.sin_addr.s_addr
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0){//创建socket
printf("socket error\n");
return 0;
}
while(1){
fgets(send,100,stdin);//从键盘读入字符
sendto(sockfd,send,strlen(send),0,(struct sockaddr*)&server,sizeof(server));//发送数据
n = recvfrom(sockfd,rcv,100,0,NULL,NULL);//接收数据
rcv[n] = '\0';
printf("%s\n",rcv);
}
}
功能:客户端将用户输入的数据传送到服务器,服务器再将数据返回到客户端。
运行结果