udpserver例程

来源:互联网 发布:js element 编辑:程序博客网 时间:2024/04/28 01:50
#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 8900int 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 DEBUGprintf("the sokcet id is %d\n",sockfd);printf("enter binding phrase....\n");#endifsetsockopt(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 DEBUGprintf("leaving binding phrase\n");printf("entering data exchange phrase\n");#endiflength = 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;}}}

原创粉丝点击