Chinaunix首页 | 论坛 | 博客
  • 博客访问: 943474
  • 博文数量: 403
  • 博客积分: 27
  • 博客等级: 民兵
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-25 22:20
文章分类

全部博文(403)

文章存档

2016年(3)

2015年(16)

2014年(163)

2013年(222)

分类: LINUX

2013-12-20 10:11:14

http://blog.csdn.net/wuhengwudi/article/details/6793983

[html] view plaincopy
  1. socket服务器端:server.c  
[html] view plaincopy
  1. //socket读写默认的是非阻塞的  
[html] view plaincopy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. #include <malloc.h>  
  5. #include <sys/types.h>  
  6. #include <errno.h>  
  7. #include <sys/stat.h>  
  8. #include <fcntl.h>  
  9. #include <sys/select.h>  
  10. #include <unistd.h>  
  11. #include <termios.h>  
  12. #include <sys/stat.h>  
  13. /**********定时器头文件***************/  
  14. #include <sys/time.h>   
  15. #include <signal.h>   
  16. /***********进程间SOCKET通信头文件**********/  
  17. #include <sys/socket.h>   
  18. #include <sys/un.h>   
  19.   
  20. #define UNIX_DOMAIN "/tmp/UNIX2.domain"   
  21.   
  22. static char recv_php_buf[256];  //接收client数据的缓冲  
  23. static int recv_php_num=0;      //接收client数据的总长度  
  24. const char recv_php_buf1[20]={0x00,0x01,0x02,0x03,0x04,0x05,0x06};  
  25. void main()  
  26. {  
  27.     socklen_t clt_addr_len;   
  28.     int listen_fd;   
  29.     int com_fd;   
  30.     int ret=0;   
  31.     int i;   
  32.       
  33.     int len;   
  34.     struct sockaddr_un clt_addr;   
  35.     struct sockaddr_un srv_addr;   
  36.     while(1)  
  37.     {  
  38.         //创建用于通信的套接字,通信域为UNIX通信域   
  39.   
  40.         listen_fd=socket(AF_UNIX,SOCK_STREAM,0);   
  41.         if(listen_fd<0)  
  42.         {   
  43.             perror("cannot create listening socket");   
  44.             continue;   
  45.         }   
  46.         else  
  47.         {  
  48.             while(1)  
  49.             {  
  50.                 //设置服务器地址参数   
  51.                 srv_addr.sun_family=AF_UNIX;   
  52.                 strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1);   
  53.                 unlink(UNIX_DOMAIN);   
  54.                 //绑定套接字与服务器地址信息   
  55.                 ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));   
  56.                 if(ret==-1)  
  57.                 {   
  58.                     perror("cannot bind server socket");   
  59.                     close(listen_fd);   
  60.                     unlink(UNIX_DOMAIN);   
  61.                     break;   
  62.                 }   
  63.                 //对套接字进行监听,判断是否有连接请求   
  64.                 ret=listen(listen_fd,1);   
  65.                 if(ret==-1)  
  66.                 {   
  67.                     perror("cannot listen the client connect request");   
  68.                     close(listen_fd);   
  69.                     unlink(UNIX_DOMAIN);   
  70.                     break;   
  71.                 }   
  72.                 chmod(UNIX_DOMAIN,00777);//设置通信文件权限  
  73.                 while(1)  
  74.                 {  
  75.                     //当有连接请求时,调用accept函数建立服务器与客户机之间的连接   
  76.                     len=sizeof(clt_addr);   
  77.                     com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);   
  78.                     if(com_fd<0)  
  79.                     {   
  80.                         perror("cannot accept client connect request");   
  81.                         close(listen_fd);   
  82.                         unlink(UNIX_DOMAIN);   
  83.                         break;   
  84.                     }   
  85.                     //读取并输出客户端发送过来的连接信息   
  86.                     memset(recv_php_buf,0,256);   
  87.                     recv_php_num=read(com_fd,recv_php_buf,sizeof(recv_php_buf));   
  88.                     printf("\n=====recv=====\n");  
  89.                     for(i=0;i<recv_php_num;i++)   
  90.                     printf("%d ",recv_php_buf[i]);   
  91.                     printf("\n");  
  92.                     /*if(recv_php_buf[0]==0x02)  
  93.                     {  
  94.                         if(recv_php_buf[recv_php_num-1]==0x00)  
  95.                         {  
  96.                             recv_php_buf[recv_php_num-1]=0x01;  
  97.                         }  
  98.                         else  
  99.                         {  
  100.                             recv_php_buf[recv_php_num-1]=0x00;  
  101.                         }  
  102.                     }  
  103.                     */  
  104.                     //recv_php_buf[20]+=1;  
  105.                     write(com_fd,recv_php_buf,recv_php_num);  
  106.                     printf("\n=====send=====\n");  
  107.                     for(i=0;i<recv_php_num;i++)   
  108.                     printf("%d ",recv_php_buf[i]);   
  109.                     printf("\n");  
  110.                     //write(com_fd,recv_php_buf,20);  
  111.                     close(com_fd);//注意要关闭连接符号,不然会超过连接数而报错  
  112.                 }  
  113.                   
  114.             }  
  115.   
  116.         }  
  117.     }  
[html] view plaincopy
  1. socket用户端:client.c  
[cpp] view plaincopy
  1. #include   
  2. #include   
  3. #include   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9. #include   
  10. #include   
  11. #include   
  12. #include   
  13. /**********定时器头文件***************/  
  14. #include    
  15. #include    
  16. /***********进程间SOCKET通信头文件**********/  
  17. #include    
  18. #include    
  19.   
  20. #include   
  21. #pragma pack(1)         //设定为1字节对齐  
  22. #define UNIX_DOMAIN2 "/tmp/UNIX2.domain"   
  23. static char recv_php_buf[256]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};      
  24. struct test  
  25. {  
  26.     char a;  
  27.     int b;  
  28.     int c;  
  29.   
  30.   
  31.   
  32.   
  33. }se;  
  34. void main(void)  
  35. {  
  36.     int connect_fd;  
  37.     int ret=0;  
  38.     int i;  
  39.     static struct sockaddr_un srv_addr;   
  40.     printf("ipc通信线程\n");  
  41.     //while(1)  
  42.     //{  
  43.         //创建用于通信的套接字,通信域为UNIX通信域   
  44.         connect_fd=socket(AF_UNIX,SOCK_STREAM,0);   
  45.         printf("%d\n",connect_fd);   
  46.         if(connect_fd<0)  
  47.         {   
  48.             perror("cannot create communication socket");  
  49.             printf("%d\n",connect_fd);   
  50.             //continue;  
  51.         }   
  52.         else  
  53.         {  
  54.             //while(1)  
  55.             //{  
  56.                 srv_addr.sun_family=AF_UNIX;   
  57.                 strcpy(srv_addr.sun_path,UNIX_DOMAIN2);  
  58.               
  59.                 //连接服务器   
  60.                 ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));   
  61.                 if(ret==-1)  
  62.                 {   
  63.                     close(connect_fd);   
  64.                     printf("connect fail\n");  
  65.                     //break;            //重新创建socket  
  66.                 }  
  67.                 else  
  68.                 {     
  69.                 //否则,连接服务器成功  
  70.                 //while(1)  
  71.                 //{  
  72.                     se.a=0x01;  
  73.                     se.b=0x01020304;  
  74.                     se.c=0x05060708;  
  75.                     write(connect_fd,recv_php_buf,20);//将数据传送到外部应用程序,发送实际长度  
  76.                     //write(connect_fd,&se,sizeof(struct test));  
  77.                     memset(recv_php_buf,0,sizeof(recv_php_buf));                             //清空socket_buf  
  78.                     //sleep(1);  
  79.                     //fcntl(connect_fd,F_SETEL,O_NONBLOCK);  
  80.                     read(connect_fd,recv_php_buf,sizeof(recv_php_buf));  
  81.                     printf("receive over\n");  
  82.                     for(i=0;i<20;i++)  
  83.                     printf("%x ",recv_php_buf[i]);  
  84.                     //printf("%x ",se.a);  
  85.                     //printf("%x ",se.b);  
  86.                     //printf("%x ",se.c);  
  87.                     close(connect_fd);  
  88.                     //break;                              
  89.                 //}  
  90.                 }  
  91.               
  92.             //}  
  93.             //close(connect_fd);  
  94.         }  
  95.       
  96.     //}  
  97.   
  98. }  
阅读(902) | 评论(0) | 转发(0) |
0

上一篇:linux socket进程通信

下一篇:listen函数

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