UDPプログラム設計例
UDPサービス:
UDPクライアント:
#include<sys/socket.h>
#include<sys/unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#define SIZE 1024
#define portno 8888
void udp_responds(int sockfd)
{
struct sockaddr_in addr;
int addrlen,nbytes;
char buf[SIZE];
while(1)
{
bzero(buf,SIZE);
addrlen=sizeof(struct sockaddr);
nbytes=recvfrom(sockfd,buf,SIZE,0,(struct sockaddr *)(&addr),&addrlen);
buf[nbytes]='\0';
printf("Server received:%s
",buf);
}
}
int main()
{
int sockfd;
struct sockaddr_in addr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1)
{
printf("create sock failed
");
return -1;
}
bzero(&addr,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(portno);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr *)(&addr),sizeof(struct sockaddr_in))==-1)
{
printf("bind failed
");
return -1;
}
udp_responds(sockfd);
close(sockfd);
return 1;
}
UDPクライアント:
#include<sys/socket.h>
#include<sys/unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#define SIZE 1024
#define portno 8888
void udp_requ(int sockfd,struct sockaddr_in *paddr,int addrlen)
{
char buf[SIZE];
while(1)
{
printf("please input what you want to say:
");
fgets(buf,SIZE,stdin);
sendto(sockfd,buf,SIZE,0,(struct sockaddr *)paddr,addrlen);
bzero(buf,SIZE);
}
}
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in addr;
if(argc!=2)
{
printf("arguments error
");
return -1;
}
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd==-1)
{
printf("create sock failed
");
return -1;
}
bzero(&addr,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(portno);
if(inet_aton(argv[1],&(addr.sin_addr))<0)
{
printf("transmit error
");
return -1;
}
//if(bind(sockfd,(struct sockaddr *)(&addr),sizeof(struct sockaddr_in))==-1)
//{
// printf("bind failed
");
// return -1;
//}
udp_requ(sockfd,&addr,sizeof(struct sockaddr_in));
close(sockfd);
return -1;
}