1、服务端源代码
#include <sys/select.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if(argc!=3)
{
printf("error args,请输入命令行参数ip和port:\n");
return -1;
}
int sfd;
sfd=socket(AF_INET,SOCK_DGRAM,0);
if(-1==sfd)
{
perror("socket");
return -1;
}
struct sockaddr_in ser;
memset(&ser,0,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(atoi(argv[2]));
ser.sin_addr.s_addr=inet_addr(argv[1]);
int ret;
ret=bind(sfd,(struct sockaddr*)&ser,sizeof(ser));
if(-1==ret)
{
perror("bind");
return -1;
}
char buf[128]={0};
struct sockaddr_in cli;
int len;
while(1)
{
memset(&buf,0,sizeof(buf));
memset(&cli,0,sizeof(cli));
len=sizeof(cli);
ret=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cli,&len);
if(-1==ret)
{
perror("recvfrom");
return -1;
}
printf("UDP Server:客户端发来的信息是%s\n",buf);
}
close(sfd);
return 0;
}
2、客户端源代码
#include <signal.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if(argc!=3)
{
printf("error args,请输入命令行参数ip和port:\n");
return -1;
}
int sfd;
sfd=socket(AF_INET,SOCK_DGRAM,0);
if(-1==sfd)
{
perror("socket");
return -1;
}
struct sockaddr_in ser;
memset(&ser,0,sizeof(ser));
ser.sin_family=AF_INET;
ser.sin_port=htons(atoi(argv[2]));
ser.sin_addr.s_addr=inet_addr(argv[1]);
int ret;
int len=sizeof(ser);
ret=sendto(sfd,"I am udpclient",14,0,(struct sockaddr*)&ser,len);
if(-1==ret)
{
perror("sendto");
return -1;
}
printf("Client:已成功连接到服务器,请向服务器发送信息:\n");
char buf[128]={0};
while(1)
{
memset(&buf,0,sizeof(buf));
read(0,buf,sizeof(buf));
ret=sendto(sfd,buf,strlen(buf)-1,0,(struct sockaddr*)&ser,len);
if(-1==ret)
{
perror("sendto");
return -1;
}
}
close(sfd);
return 0;
}
3、测试示例
