Chinaunix首页 | 论坛 | 博客
  • 博客访问: 630804
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:30:15

原文地址:UDP程序设计 作者:luozhiyong131

  1. #include <stdlib.h>

  2. #include <stdio.h>

  3. #include <errno.h>

  4. #include <string.h>

  5. #include <unistd.h>

  6. #include <netdb.h>

  7. #include <sys/socket.h>

  8. #include <netinet/in.h>

  9. #include <sys/types.h>

  10. #include <arpa/inet.h>



  11. #define SERVER_PORT 8888

  12. #define MAX_MSG_SIZE 1024



  13. void udps_respon(int sockfd)

  14. {

  15.        struct sockaddr_in addr;

  16.        int addrlen,n;

  17.        char msg[MAX_MSG_SIZE];



  18.        while(1)

  19.        { /* 从网络上读,并写到网络上 */

  20.               bzero(msg,sizeof(msg)); // 初始化,清零


  21.               addrlen = sizeof(struct sockaddr);

  22.               n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&addr,&addrlen); // 从客户端接收消息


  23.               msg[n]=0;//将收到的字符串尾端添加上字符串结束标志


  24.               /* 显示服务端已经收到了信息 */

  25.               fprintf(stdout,"Server have received %s",msg); // 显示消息


  26.        }

  27. }



  28. int main(void)

  29. {

  30.        int sockfd;

  31.        struct sockaddr_in addr;



  32.        /* 服务器端开始建立socket描述符 */

  33.        sockfd=socket(AF_INET,SOCK_DGRAM,0);

  34.        if(sockfd<0)

  35.        {

  36.               fprintf(stderr,"Socket Error:%s\n",strerror(errno));

  37.               exit(1);

  38.        }



  39.        /* 服务器端填充 sockaddr结构 */

  40.        bzero(&addr,sizeof(struct sockaddr_in));

  41.        addr.sin_family=AF_INET;

  42.        addr.sin_addr.s_addr=htonl(INADDR_ANY);

  43.        addr.sin_port=htons(SERVER_PORT);



  44.        /* 捆绑sockfd描述符 */

  45.        if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)

  46.        {

  47.               fprintf(stderr,"Bind Error:%s\n",strerror(errno));

  48.               exit(1);

  49.        }



  50.        udps_respon(sockfd); // 进行读写操作


  51.        close(sockfd);

  52. }







  53. #include <stdlib.h>

  54. #include <stdio.h>

  55. #include <errno.h>

  56. #include <string.h>

  57. #include <unistd.h>

  58. #include <netdb.h>

  59. #include <sys/socket.h>

  60. #include <netinet/in.h>

  61. #include <sys/types.h>

  62. #include <arpa/inet.h>



  63. #define SERVER_PORT 8888

  64. #define MAX_BUF_SIZE 1024



  65. void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len)

  66. {

  67.        char buffer[MAX_BUF_SIZE];

  68.        int n;

  69.        while(1)

  70.        { /* 从键盘读入,写到服务端 */

  71.               printf("Please input char:\n");

  72.               fgets(buffer,MAX_BUF_SIZE,stdin);

  73.               sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr *)addr,len);

  74.               bzero(buffer,MAX_BUF_SIZE);

  75.        }

  76. }



  77. int main(int argc,char **argv)

  78. {

  79.        int sockfd;

  80.        struct sockaddr_in addr;



  81.        if(argc!=2)

  82.        {

  83.               fprintf(stderr,"Usage:%s server_ip\n",argv[0]);

  84.               exit(1);

  85.        }



  86.        /* 建立 sockfd描述符 */

  87.        sockfd=socket(AF_INET,SOCK_DGRAM,0);

  88.        if(sockfd<0)

  89.        {

  90.               fprintf(stderr,"Socket Error:%s\n",strerror(errno));

  91.               exit(1);

  92.        }



  93.        /* 填充服务端的资料 */

  94.        bzero(&addr,sizeof(struct sockaddr_in));

  95.        addr.sin_family=AF_INET;

  96.        addr.sin_port=htons(SERVER_PORT);

  97.        if(inet_aton(argv[1],&addr.sin_addr)<0) /*inet_aton函数用于把字符串型的IP地址转化成网络2进制数字*/

  98.        {

  99.               fprintf(stderr,"Ip error:%s\n",strerror(errno));

  100.               exit(1);

  101.        }



  102.        udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in)); // 进行读写操作


  103.        close(sockfd);

  104. }
阅读(242) | 评论(0) | 转发(0) |
0

上一篇:TCP程序设计

下一篇:并发服务编程

给主人留下些什么吧!~~