#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#define PORT 8900
int main()
{
int sockfd;
struct sockaddr_in server;
struct sockaddr_in client;
char send_buf[2048];
char recv_buf[2048];
int length;
int sendnum;
int recvnum;
int port;
port = PORT;
int opt = SO_REUSEADDR;
/*The first stage:initnial phase*/
/*1.1 generating socket phrahse*/
if (-1==(sockfd=socket(AF_INET,SOCK_DGRAM,0)))
{
perror("error in generate socket\n");
exit(1);
}
#ifdef DEBUG
printf("the sokcet id is %d\n",sockfd);
printf("enter binding phrase....\n");
#endif
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
/*1.2 binding the socket*/
memset(&server,0,sizeof(struct sockaddr));
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons(port);
if (-1==bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr)))
{
perror("error in binding phrase\n");
close(sockfd);
exit(1);
}
#ifdef DEBUG
printf("leaving binding phrase\n");
printf("entering data exchange phrase\n");
#endif
length = sizeof(struct sockaddr_in);
/* The Second Stage: data exchange phrase */
while(1)
{
memset(&send_buf,0,sizeof(send_buf));
memset(&recv_buf,0,sizeof(recv_buf));
/* receive the data from the client*/
recvnum=recvfrom(sockfd,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&client,&length);
recv_buf[recvnum]='\0';
printf("the message from the client is %s:\n",recv_buf);
sendnum = sprintf(send_buf,"hello,the guest from %s",inet_ntoa(client.sin_addr));
sendto(sockfd,send_buf,sendnum,0,(struct sockaddr*)&client,sizeof(struct sockaddr));
if (0==strcmp(recv_buf,"quit"))
{
perror("the server is terminted by client\n");
close(sockfd);
return 0;
}
}
}
udpserver例程
最新推荐文章于 2020-02-27 10:26:48 发布