基于UDP的socket 服务端和客户端实现
——服务端
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#define SERVER_PORT 7890
#define MAX_MSG_SIZE 1024
int main(void)
{
int sockfd;
struct sockaddr_in addr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&addr,sizeof(struct sockaddr_in)); // 初始化,置0
addr.sin_family=AF_INET; // Internet
addr.sin_addr.s_addr=htonl(INADDR_ANY);
//addr.sin_addr.s_addr=inet_addr("127.0.0.1");
addr.sin_port=htons(SERVER_PORT);
int ret = bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in));
struct sockaddr_in client_addr;
int addrlen,n;
char msg[MAX_MSG_SIZE];
while(1)
{
bzero(msg,sizeof(msg)); // 初始化,清零
addrlen = sizeof(struct sockaddr);
n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&client_addr,&addrlen); // 从客户端接收消息
msg[n]=0;
fprintf(stdout,"Server received %s",msg); // 显示消息
}
close(sockfd);
}
——客户端
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#define SERVER_PORT 7890
#define MAX_BUF_SIZE 1024
int main(int argc,char **argv)
{
int sockfd;
struct sockaddr_in addr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&addr,sizeof(struct sockaddr_in)); // 初始化,置0
addr.sin_family=AF_INET; // Internet
addr.sin_port=htons(SERVER_PORT);
int ret = inet_aton(argv[1],&addr.sin_addr);
char buffer[MAX_BUF_SIZE];
int n;
while(1)
{
fgets(buffer,MAX_BUF_SIZE,stdin);
struct sockadd_int *t_addr = &addr;
sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr*)t_addr,sizeof(struct sockaddr_in));
bzero(buffer,MAX_BUF_SIZE);
}
close(sockfd);
}