/*
server
编译命令: gcc -Wall -g -o server -lpthread
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#define PORT 8458
void udp_recv(int fd)
{
char strRecv[1024] = {"\0"};
int iRecvLen = -1,iSize;
struct sockaddr_in cli;
iSize = sizeof(cli);
while(1)
{
memset(strRecv,0x00,sizeof(strRecv));
iRecvLen = recvfrom(fd,strRecv,sizeof(strRecv),0,(struct sockaddr *)&cli,&iSize);
//strRecv[iRecvLen] = '\0';
if (strlen(strRecv) > 0)
{
printf("RecvLen:%d,context:%s\n",iRecvLen,strRecv);
}
}
return ;
}
int main()
{
struct sockaddr_in SerAddr;
int serfd = -1,iSize = -1;
iSize = sizeof(SerAddr);
serfd = socket(PF_INET,SOCK_DGRAM,0);
if (0 > serfd)
{
printf("init socket failed:%d\n",serfd);
return 0;
}
memset(&(SerAddr),0x00,sizeof(struct sockaddr_in));
SerAddr.sin_family = AF_INET;
SerAddr.sin_port = htons(PORT);
SerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if ( 0 > bind(serfd,(struct sockaddr *)&SerAddr,iSize))
{
printf("server bind to port %d failed \n",PORT);
return 0;
}
udp_recv(serfd);
return 0;
}
/*
client
编译命令: gcc -Wall -g -o client -lpthread
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <errno.h>
void udp_send(int udpfd)
{
int i = 0,iSerPort = 8458,iSize = 0;;
char buf[128] = {"\0"},sIP[64] = {"127.0.0.1"};
int iLen = 128;
struct sockaddr_in peer;
iSize = sizeof(peer);
for (i = 0; i < 10; i++)
{
bzero((char *)&peer,sizeof(struct sockaddr_in));
peer.sin_family = AF_INET;
peer.sin_port = htons(iSerPort);
peer.sin_addr.s_addr = inet_addr(sIP);
memset(buf,0x00,sizeof(buf));
sprintf(buf,"string%d-string%d-string%d-string%d-string%d",i + 1,i + 1,i + 1,i + 1,i + 1);
printf("send message:%s\n",buf);
iLen = sendto(udpfd,buf,strlen(buf) + 1,0,(struct sockaddr *)&peer,iSize);
if ( 0 > iLen)
{
printf("send failed\n");
}
}
return;
}
int main()
{
struct sockaddr_in SerAddr;
int udpfd = -1,iPort = 8456;
udpfd = socket(AF_INET,SOCK_DGRAM,0);
if(udpfd < 0)
{
printf("socket error:%s\n",strerror(errno));
return -1;
}
memset(&(SerAddr),0x00,sizeof(SerAddr));
SerAddr.sin_family = AF_INET;
SerAddr.sin_port = htons(iPort);
SerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if ( 0 > bind(udpfd,(struct sockaddr *)&SerAddr,sizeof(struct sockaddr)) )
{
printf("bind failed:%s\n",strerror(errno));
return -1;
}
udp_send(udpfd);
printf("\nclient exit!\n\n");
return 0;
}
转载于:https://blog.51cto.com/jeyochen/506452