UDP Socket编程

来源:互联网 发布:web项目程序员个人简历 编辑:程序博客网 时间:2024/04/28 07:17

UDP编程的服务器端一般步骤是:

1、创建一个socket,用函数socket();

3、绑定IP地址、端口等信息到socket上,用函数bind();

4、循环接收发送数据,用函数recvfrom()、sendto();

5、关闭网络连接;

 

UDP编程的客户端一般步骤是:

1、创建一个socket,用函数socket();

2、设置对方的IP地址和端口等属性;

3、连接服务器,用函数connect();

  若是只是一次发送、接收数据,此函数可不用;

  若是循环发送接收,则此处要用connect函数;因为若不用,当sendto()后这时服务器器kill掉,则   client端阻塞在recvfrom处;

4、循环发送接收数据,用函数sendto()、recvfrom();

5、关闭网络连接;


使用C语言,实现过程如下:

UDPServer.c

#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <string.h> #define BUFSIZE 1024#define ip_address "127.0.0.1"#define PORT 3000 int main(){     int sockfd;     int port = PORT;     struct sockaddr_in servaddr,clientaddr;     struct hostent *hostp;     char buf[BUFSIZE];     int res;      //create socket     sockfd =socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);     //or sockfd = socket(AF_INET,SOCK_DGRAM,0);     if(sockfd < 0)     printf("errorcreate socket!\n");     //set socket option     int optval = 1;     setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(constvoid*)&optval,sizeof(int));      //build the server's Internet address     bzero((char *)&servaddr,sizeof(servaddr));     servaddr.sin_family = AF_INET;     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);     servaddr.sin_port = htons(port);      //bind     if(bind(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr)) < 0)     printf("error on binding!\n");      //recvfrom and sendto in circle     int clientlen = sizeof(clientaddr);     while(1)    {       bzero(buf,BUFSIZE);        res = recvfrom(sockfd,buf,BUFSIZE,0,(structsockaddr*)&clientaddr,&clientlen);       if(res < 0)      {         printf("error in recvfrom!\n");         break;      }      res = sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&clientaddr,clientlen);      if(res < 0)      {            printf("error in sendto.\n");          break;      }   }   close(sockfd);}


UDPClient.c

#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#define BUFSIZE 1024void error(char* msg){perror(msg);exit(0);}int main(){   int sockfd;   int port = 3000;   int res;   struct sockaddr_in servaddr;   char buf[BUFSIZE];   //create socket   sockfd = socket(AF_INET,SOCK_DGRAM,0);   if(sockfd < 0)   error("error create socket");    //build the server's Internet address    bzero((char *)&servaddr,sizeof(servaddr));    servaddr.sin_family = AF_INET;    //servaddr.sin_addr = inet_addr("127.0.0.1");     //or inet_aton("127.0.0.1",servaddr.sin_addr.s_addr);    servaddr.sin_port = htons(port);    //get msg from user    bzero(buf,BUFSIZE);    printf("Please enter msg:");    fgets(buf,BUFSIZE,stdin);    //send msg to server    res = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&servaddr,sizeof(servaddr));    if(res < 0)         error("error in sendto");    //print the server's reply    int servaddrlen = sizeof(servaddr);    res = recvfrom(sockfd,buf,strlen(buf),0,(struct sockaddr *)&servaddr,&servaddrlen);    if(res < 0)        error("error in recvfrom");    printf("Echo from server: %s",buf);return 0; }

0 0
原创粉丝点击