服务器端:
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
int usage(const char *proc)
{
printf("usage:%s [local_ip] [local_port]",proc);
}
int main(int argc,char *argv[])
{
if(argc!=3)
{
usage(argv[0]);
return 1;
}
int sock=socket(AF_INET,SOCK_DGRAM,0);
if(sock<0)
{
perror("socket");
return 1;
}
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port=htons(atoi(argv[2]));
local.sin_addr.s_addr=inet_addr(argv[1]);
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)
{ printf("please enter:");
perror("bind");
return 3;
}
struct sockaddr_in client;
socklen_t len=sizeof(client);
char buf[1024];
while(1)
{
ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0,\
(struct sockaddr*)&client,&len);
if(s>0)
{
buf[s]=0;
printf("%s:%d say: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf);
sendto(sock,buf,strlen(buf),0,\
(struct sockaddr*)&client,len);
}
}
close(sock);
return 0;
}
客户端
#include<stdio.h>
#include<stdlib.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:[local_ip] [local_port]",proc);
}
int main(int argc,char *argv[])
{
if(argc!=3)
{
usage(argv[0]);
perror("usage");
return 1;
}
int sock=socket(AF_INET,SOCK_DGRAM,0);
if(sock<0)
{
perror("socket");
return 2;
}
struct sockaddr_in peer;
peer.sin_family=AF_INET;
peer.sin_port=htons(atoi(argv[2]));
peer.sin_addr.s_addr=inet_addr(argv[1]);
char buf[1024];
while(1)
{
printf("please enter:");
fflush(stdout);
ssize_t s=read(sock,buf,sizeof(buf)-1);
if(s>0)
{
buf[s-1]=0;
sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&peer,sizeof(peer));
ssize_t _s=recvfrom(sock,buf,sizeof(buf)-1,0,NULL,NULL);
printf("sever echo:%s\n",buf);
}
}
}