博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket example
阅读量:5875 次
发布时间:2019-06-19

本文共 3404 字,大约阅读时间需要 11 分钟。

for code copy in the future

simple server and client 

may be useful for copy in the future

 

server:

[cpp]
  1. #include <errno.h>  
  2. #include "sys/types.h"  
  3. #include "sys/socket.h"  
  4. #include "sys/stat.h"  
  5. #include "unistd.h"  
  6. #include <netinet/in.h>  
  7. //#include <arpa/inet.h>  
  8. #include <fcntl.h>  
  9.   
  10. #define SERVER_PORT (56738)  
  11. #define SERVER_IP "127.0.0.1"  
  12. #define LOG printf  
  13.   
  14. static void handle_crashing_process_new(int fd)  
  15. {  
  16.     int n;  
  17.     unsigned int tid;  
  18.     int length = getpid();  
  19.     int retry = 30;  
  20.     printf("handle_crashing_process_new in\n");  
  21.     while((n = read(fd, &tid, sizeof(unsigned))) != sizeof(unsigned)) {  
  22.         if(errno == EINTR) continue;  
  23.         if(errno == EWOULDBLOCK) {  
  24.             if(retry-- > 0) {  
  25.                 usleep(100 * 1000);  
  26.                 continue;  
  27.             }  
  28.             LOG("timed out reading tid\n");  
  29.             goto done;  
  30.         }  
  31.         //LOG("read failure %s\n", strerror(errno));  
  32.         //goto done;  
  33.     }  
  34.     printf("getpid =%d\n",tid);  
  35.     n = send(fd, &length,sizeof(length),0);  
  36.     if(n < 0){   
  37.         printf("send failure %s\n", strerror(errno));  
  38.         goto done;  
  39.     }  
  40.     done:  
  41.         return;  
  42. }  
  43. int main(int argc, char** argv)  
  44. {  
  45.     int s;  
  46.     struct sockaddr_in addr;    
  47.     //bzero(&addr,sizeof(addr));  
  48.   
  49.     addr.sin_family = AF_INET;  
  50.     addr.sin_port = htons(SERVER_PORT);  
  51.     addr.sin_addr.s_addr = inet_addr(SERVER_IP);  
  52.       
  53.     s = socket(AF_INET,  
  54.             SOCK_STREAM, 0);  
  55.     if(s < 0){   
  56.         printf("socket failure %s\n", strerror(errno));  
  57.         goto done;  
  58.     }  
  59.     //fcntl(s, F_SETFD, FD_CLOEXEC);  
  60.   
  61.     //LOG("debuggerd: " __DATE__ " " __TIME__ "\n");  
  62.     //printf("pid=%d,tid=%d\n",getpid(),gettid());  
  63.       
  64.     if(bind(s, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) < 0)   
  65.     {    
  66.         printf("bind error %s\n",strerror(errno));  
  67.         goto done;      
  68.     }  
  69.       
  70.     if (listen(s,10))  
  71.     {  
  72.         printf("listen error %s\n",strerror(errno));  
  73.         goto done;      
  74.     }  
  75.       
  76.     for(;;) {  
  77.         struct sockaddr addr;  
  78.         socklen_t alen;  
  79.         int fd;  
  80.   
  81.         alen = sizeof(addr);  
  82.         printf("before accept\n");  
  83.         fd = accept(s, &addr, &alen);  
  84.         printf("after accept\n");  
  85.         if(fd < 0) {  
  86.             printf("accept failed: %s\n", strerror(errno));  
  87.             continue;  
  88.         }  
  89.         //fcntl(fd, F_SETFD, FD_CLOEXEC);  
  90.         handle_crashing_process_new(fd);  
  91.         close(fd);  
  92.         fd = -1;  
  93.     }  
  94.     done:  
  95.     close(s);  
  96.       
  97.     return 0;  
  98. }  

client

 

[cpp]
  1. #include <stdio.h>  
  2. #include <errno.h>  
  3. #include "sys/types.h"  
  4. #include "sys/socket.h"  
  5. #include "sys/stat.h"  
  6. #include "unistd.h"  
  7. //#include <sys/syscall.h>    
  8. #include <netinet/in.h>  
  9. //#include <arpa/inet.h>  
  10. #include <fcntl.h>  
  11.   
  12.     
  13. #define gettid() ((pid_t) syscall(SYS_gettid))   
  14. #define SERVER_PORT 56738  
  15. #define SERVER_IP "127.0.0.1"  
  16. #define LOG printf  
  17.   
  18.  void sendPidtoServer()  
  19. {  
  20.     int s;  
  21.     int pid, tid;  
  22.     int datalen=0,retry=30;  
  23.     printf("333 pid\n");  
  24.     pid=getpid();  
  25.     tid=pid;//gettid();  
  26.     int n = 0;  
  27.     printf("pid=%d\n",pid);  
  28.     struct sockaddr_in addr;    
  29.     //bzero(&addr,sizeof(addr));  
  30.   
  31.     addr.sin_family = AF_INET;  
  32.     addr.sin_port = htons(SERVER_PORT);  
  33.     addr.sin_addr.s_addr = inet_addr(SERVER_IP);  
  34.       
  35.     s = socket(AF_INET, SOCK_STREAM, 0);  
  36.     if (s<0)  
  37.     {  
  38.         printf(" socket error %s", strerror(errno));  
  39.         goto done;  
  40.     }  
  41.     n= connect(s,(struct sockaddr*)(&addr),sizeof(addr));  
  42.     if (n!=0)  
  43.     {  
  44.         printf(" connect error %s", strerror(errno));  
  45.         goto done;  
  46.     }  
  47.     n = send(s,&tid,sizeof(tid),0);  
  48.     if (n<0)  
  49.     {  
  50.         printf(" connect error %s\n", strerror(errno));  
  51.         goto done;  
  52.     }  
  53.     while((n = read(s, &datalen, sizeof(datalen))) != sizeof(datalen)) {  
  54.         if(errno == EINTR) continue;  
  55.         if(errno == EWOULDBLOCK) {  
  56.             if(retry-- > 0) {  
  57.                 usleep(100 * 1000);  
  58.                 continue;  
  59.             }  
  60.             LOG("timed out reading tid\n");  
  61.             goto done;  
  62.         }  
  63.     }      
  64.     printf("get length=%d\n",datalen);  
  65.     sleep(1);  
  66.     done:  
  67.     close(s);  
  68. }  
  69.   
  70. int main(int argc, char** argv)  
  71. {  
  72.     printf("socket client\n");  
  73.     sendPidtoServer();  
  74.     return 0;  

转载于:https://www.cnblogs.com/elfylin/archive/2012/04/05/2433789.html

你可能感兴趣的文章
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
七天学会ASP.NET MVC (四)——用户授权认证问题
查看>>
upgrade to iOS7,how to remove stroyboard?
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
zabbix监控部署
查看>>
struts中的xwork源码下载地址
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
CDays–4 习题一至四及相关内容解析。
查看>>
L3.十一.匿名函数和map方法
查看>>
java面向对象高级分层实例_实体类
查看>>
android aapt 用法 -- ApkReader
查看>>
[翻译]用 Puppet 搭建易管理的服务器基础架构(3)
查看>>
Android -- AudioPlayer
查看>>
Python大数据依赖包安装
查看>>
Android View.onMeasure方法的理解
查看>>
Node.js 爬虫初探
查看>>
ABP理论学习之仓储
查看>>
centos7下使用yum安装mysql
查看>>