服务端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SERVER_PORT 8888
int main(void)
{
struct sockaddr_in server_addr={0};
int sockfd;
int ret;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
perror("socket error");
exit(-1);
}
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(SERVER_PORT);
ret=bind(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr));
if(ret<0)
{
perror("bind error");
close(sockfd);
exit(EXIT_FAILURE);
}
struct sockaddr_in client_addr={0};
int addrlen=sizeof(client_addr);
char recvbuf[512];
while(1)
{
memset(recvbuf,0,sizeof(recvbuf));
ret=recvfrom(sockfd,recvbuf,sizeof(recvbuf),0,(struct sockaddr *)&client_addr,&addrlen);
if(ret<0)
{
perror("recvform error");
continue;
}
printf("connect success\n");
char ipv4_addr[16];
inet_ntop(AF_INET,(void *)&client_addr.sin_addr,ipv4_addr,sizeof(client_addr));
printf("mas from %s:%d,data:%s\n",ipv4_addr,ntohs(client_addr.sin_port),recvbuf);
if(strncmp("exit",recvbuf,4)==0)
{
printf("client %s %d exit...\n",ipv4_addr,ntohs(client_addr.sin_port));
}
}
exit(EXIT_SUCCESS);
}
客户端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define SERVER_PORT 8888
#define SERVER_IP "192.168.71.10"
#include<stdio.h>
int main(void)
{
struct sockaddr_in server_addr={0};
int addrlen=sizeof(server_addr);
char buf[512];
int sockfd;
int ret;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
perror("socket");
exit(-1);
}
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=inet_addr(SERVER_IP);
server_addr.sin_port=htons(SERVER_PORT);
while(1)
{
memset(buf,0,sizeof(buf));
scanf("%s",buf);
sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)&server_addr,addrlen);
if(strncmp("exit",buf,4)==0)
{
printf("client exit...\n");
close(sockfd);
break;
}
}
return 0;
}