udp_client.c
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
static void Usage(const char* proc)
{
printf("Usage:%s[local_ip][local_port]\n",proc);
}
int main(int argc, char* argv[])
{
if(argc != )
{
Usage(argv[]);
return ;
}
int sock = socket(AF_INET,SOCK_DGRAM,);
if(sock < )
{
perror("sock");
return();
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[]));
server.sin_addr.s_addr = inet_addr(argv[]);
socklen_t len = sizeof(server);
char buf[];
while()
{
printf("server to ##");
fflush(stdout);
ssize_t s = read(, buf, sizeof(buf)-);
if(s > )
{
buf[s] = '\0';
sendto(sock,buf,sizeof(buf)-,,(struct sockaddr*)&server,len);
}
s = recvfrom(sock, buf, sizeof(buf)-,,(struct sockaddr *)&server,&len);
if(s > )
{
printf("client echo$:%s",buf);
}
}
close(sock);
return ;
}
udp_server.c
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
static void Usage(const char* proc)
{
printf("Usage:%s[local_ip][local_port]\n",proc);
}
int main(int argc, char* argv[])
{
if(argc != )
{
Usage(argv[]);
return ;
}
int sock = socket(AF_INET,SOCK_DGRAM,);
if(sock < )
{
perror("sock");
return();
}
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(atoi(argv[]));
local.sin_addr.s_addr = inet_addr(argv[]);
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<)
{
perror("bind");
return();
}
printf("bind success...\n");
char buf[];
while()
{
struct sockaddr_in client;
socklen_t len = sizeof(client);
ssize_t s = recvfrom(sock,buf,sizeof(buf)-,,(struct sockaddr*)&client, &len);
if(s > )
{
buf[s] = '\0';
printf("client#:%s",buf);
sendto(sock,buf,sizeof(buf)-,,(struct sockaddr*)&client,len);
}
else
{
close(sock);
printf("client quit...\n");
break;
}
}
close(sock);
return ;
}
运行结果如图: