<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【QNX】Socket Server&Client 源代碼

      【生活經(jīng)歷分享】華師國培 華師伴學(xué) 合同都是坑 消費(fèi)者付款后無法退款和華師國培簽合同需小心,合同中都是保護(hù)華師的條款,沒有保護(hù)消費(fèi)者的條款。
      收到錢,就算你因?qū)ε嘤?xùn)質(zhì)量不滿意,也不能退款。因合同消費(fèi)者維權(quán)肯定十分艱難。
      華師伴學(xué)的授課方式是看錄制的視頻,不是真人現(xiàn)場教學(xué)。是否是您和孩子想要的學(xué)習(xí)方式?
      各位打算報(bào)名的,交費(fèi)要謹(jǐn)慎!
      其他人在小紅書上發(fā)的,轉(zhuǎn):

      深圳市華師國培教育科技有限公司,黑心機(jī)構(gòu),大家擦亮眼睛,別被騙了,消費(fèi)欺詐,虛假承諾,簽合同各種坑,收到錢了不履行承諾不退款,亂扣費(fèi),維權(quán)艱難! - 小紅書

       

      1 Socket Server 源代碼

      服務(wù)端計(jì)劃只啟動一個(gè)線程,所以功能實(shí)現(xiàn)時(shí)使用了一些全局變量。
       1 int32_t skt_s_listen_fd{-1};
       2 pthread_t thr_server;
       3 struct sockaddr_un srv_addr;
       4 struct sockaddr_un cli_addr;
       5 std::vector<int32_t> com_fd_vec;
       6 
       7 void *serverSocketThd(void *arg)
       8 {
       9     SLOG_I("Start receive - server.");
      10 
      11     // listen sockfd
      12     int32_t ret = listen(skt_s_listen_fd, 1);
      13     if(ret == -1) 
      14     {
      15         SLOG_E("cannot listen the client connect request: %d - %s", errno, strerror(errno));
      16         close(skt_s_listen_fd);
      17         unlink(SOCK_PATH);
      18         return NULL;
      19     }
      20     const char *ready_flag = "LeoTest";
      21     while(1)
      22     {
      23         //have connect request use accept
      24         socklen_t len = sizeof(cli_addr);
      25         //accept the client
      26         int32_t com_fd = accept(skt_s_listen_fd, (struct sockaddr*)(&cli_addr), &len);
      27 
      28         if(com_fd < 0) 
      29         {
      30             SLOG_E("cannot accept client connect request: %d - %s", errno, strerror(errno));
      31             close(skt_s_listen_fd);
      32             unlink(SOCK_PATH);
      33             return NULL;
      34         }
      35     
      36         char buf[64] = {0};
      37         int32_t recv_size(0);
      38 
      39         recv_size = read(com_fd, buf, 10);
      40         SLOG_I("Socket readed [%d] info: %s", com_fd, buf);
      41         if (0 == strncmp(buf, ready_flag, 7))
      42         {
      43             com_fd_vec.push_back(com_fd);
      44         }
      45     }
      46 
      47     return NULL;
      48 }
      49 
      50 void socket_server_init()
      51 {
      52     int32_t ret;
      53     SLOG_I("Init socket start[%s].", SOCK_PATH);
      54  
      55     skt_s_listen_fd = socket(AF_UNIX, SOCK_STREAM, 0);
      56     if(skt_s_listen_fd < 0) {
      57         SLOG_E("cannot create communication socket: %d - %s", errno, strerror(errno));
      58         return ;
      59     }
      60 
      61     // set server addr_param
      62     srv_addr.sun_family = AF_UNIX;
      63     strcpy(srv_addr.sun_path, SOCK_PATH);
      64     unlink(SOCK_PATH);
      65 
      66     // bind sockfd & addr
      67     ret = bind(skt_s_listen_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
      68     if(ret == -1) {
      69         SLOG_E("cannot bind server socket[%s]: %d - %s", SOCK_PATH, errno, strerror(errno));
      70         close(skt_s_listen_fd);
      71         unlink(SOCK_PATH);
      72         return ;
      73     }
      74     // scheduler_ = new std::thread(&serverSocketThd, nullptr);
      75     if (EOK != pthread_create(&thr_server, NULL, serverSocketThd, nullptr)) {
      76         SLOG_E("create connect thread failed: %d - %s", errno, strerror(errno));
      77     }
      78     else {
      79     }
      80 
      81     SLOG_I("Init socket end.");
      82 }

       

      2 Socket Client 源代碼

      客戶端計(jì)劃啟動多個(gè)(如:30個(gè))線程,所以客戶端實(shí)現(xiàn)時(shí)沒有使用全局變量,盡量做到線程無關(guān)。
      void socket_client_init(int *enter);
      
      int sendMsg_client_ready(int fd)
      {
          char buf_send[] = "LeoTest";
          SLOG_I("send LeoTest to server.");
          return write(fd, buf_send, sizeof(buf_send));
      }
      
      // recv message
      void *recv_client_thread(void *arg)
      {
          if (NULL == arg)
          {
              SLOG_E("[recv_client_thread]param is not allow NULL.");
              return NULL;
          }
          SLOG_I("[recv_client_thread]receive thread starting<tid=%lu>...", pthread_self());
          RecvModel *model = (RecvModel *)arg;
          ssize_t flag = 0;
          unsigned char buf_recv[64] = {0};
          ssize_t length = 0;
          usleep(300);
          
          SLOG_D("create communication send data");
          sendMsg_client_ready(model->st);
          SLOG_D("create communication send data end");
      
          while(true)
          {
              flag = recv(model->st, buf_recv, sizeof(buf_recv), 0);
              if (0 == flag)
              {   // 需要考慮重連機(jī)制
                  SLOG_E("[recv_client_thread]remote already close connect.");
                  break;
              }
              else if (-1 == flag)
              {   // 需要考慮重連機(jī)制
                  SLOG_E("[recv_client_thread]recv failed. error message : %s", strerror(errno));
                  break;
              }
              
              length = flag;
              SLOG_D("receive data(length: %d): %s", length, buf_recv);
      
              memset(buf_recv, 0, sizeof(buf_recv));
          }
      
          close(model->st);
          return NULL;
      }
      
      
      void *client_connect_thread(void *arg)
      {
          SLOG_I("[client_connect_thread]enter: 0x%x", arg);
          if(NULL != arg) {
              int *enter = (int *)arg;
              SLOG_I("[client_connect_thread]enter[%d]...", *enter);
              
              int connect_fd;
              int ret;
              int count_connect = 0;
      
              static struct sockaddr_un srv_addr;
              // char sock_path_str[128] = {0};
          
              SLOG_I("create communication socket...");
              // create unix socket
              connect_fd = socket(PF_UNIX, SOCK_STREAM, 0);
              if(connect_fd < 0) {
                  SLOG_E("cannot create communication socket");
                  return NULL;
              }
              SLOG_D("create communication socket end");
              srv_addr.sun_family = AF_UNIX;
              // sprintf(sock_path_str, SOCK_PATH, count);
              strcpy(srv_addr.sun_path, SOCK_PATH);
              // connect server
              ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
              SLOG_I("create communication connect end: %d", ret);
              while(-1 == ret) {
                  count_connect++;
                  SLOG_W("connect to the server failed, trying no. %d", count_connect);
                  sleep(1);
                  
                  ret = connect(connect_fd, (struct sockaddr*)&srv_addr, sizeof(srv_addr));
              }
      
              RecvModel model;
              model.st = connect_fd;
              model.addr = &srv_addr;
              // 開啟線程--接收線程
              pthread_t thr_recv;
              if (pthread_create(&thr_recv, NULL, recv_client_thread, &model) != 0)
              {
                  SLOG_E("create recv thread failed");
              }
              else
              {
                  SLOG_I("create communication pthread join");
                  pthread_join(thr_recv, NULL);
                  SLOG_W("create communication pthread join end");
              }
          }
      }
      
      void socket_client_init(int *enter)
      {
          pthread_t thr_connect;
      
          SLOG_I("* * * * * * * * * * * * * * * * * * [socket_client_init]starting[%d]...", *enter);
          {
              if (EOK != pthread_create(&thr_connect, NULL, client_connect_thread, (void *)enter))
              {
                  SLOG_E("create connect thread failed");
              }
              else
              {
                  // pthread_join(thr_connect, NULL);     // PTHREAD_CREATE_JOINABLE 屬性(默認(rèn)值)需要調(diào)用此函數(shù) - 此函數(shù)會阻塞直到線程退出
              }
          }
      }

       

      3 調(diào)用示例代碼

      因?yàn)闇y試代碼是寫在同一個(gè)應(yīng)用中,所以使用命令行參數(shù)進(jìn)行區(qū)分【將命令行參數(shù)轉(zhuǎn)化為控制變量: isSktFlag】
          if(2 == isSktFlag) {
              // socket client: connect to server
              for(int i = 0; i < 30; i++) {
                  SLOG_D("[socket] client start %d...", i);
                  socket_client_init(&i);
                  std::this_thread::sleep_for(std::chrono::milliseconds(100));
              }
              std::this_thread::sleep_for(std::chrono::milliseconds(1000 * 1000));    // 因?yàn)楹竺孢€有其它測試代碼, 所以增加此行延時(shí)
          }
          else if(1 == isSktFlag) {
              SLOG_D("[socket] server start...");
              socket_server_init();
              std::this_thread::sleep_for(std::chrono::milliseconds(1000 * 1000));    // 因?yàn)楹竺孢€有其它測試代碼, 所以增加此行延時(shí)
          }
          

       

       
      只運(yùn)行 Server 時(shí)查看 uds 信息如下:

      image

       

      再運(yùn)行 client 后查看 uds 信息如下:

      image

       

       
      posted @ 2025-10-21 14:49  91program  閱讀(13)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国精品91人妻无码一区二区三区| 亚洲熟女乱一区二区三区| 亚洲真人无码永久在线| 国产精品香港三级国产av| 蜜桃一区二区三区免费看| 成人网站网址导航| 99国内精品久久久久久久| 亚洲五月丁香综合视频| 日韩高清在线亚洲专区不卡 | 97精品尹人久久大香线蕉| 黄色一级片一区二区三区| 51午夜精品免费视频| 国产精品男女爽免费视频| 女人张开腿让男人桶爽| 成人精品自拍视频免费看| 久久久综合香蕉尹人综合网| 1区2区3区4区产品不卡码网站| 免费国产女王调教在线视频 | 丁香婷婷在线视频| 国产精品综合色区av| 免费现黄频在线观看国产| 久久久久夜夜夜精品国产| 欧美乱妇狂野欧美在线视频 | 蜜臀av入口一区二区三区| √天堂中文www官网在线| 强奷乱码欧妇女中文字幕熟女| 福利视频一区二区在线| 国内自拍第一区二区三区| 人人超碰人摸人爱| 国产精品大片中文字幕| 一区二区三区四区自拍视频| 日韩精品人妻中文字幕| 章丘市| 久久精品亚洲国产成人av| 99久久亚洲综合精品成人网| 亚洲精品无码成人A片九色播放| av午夜福利一片看久久| 精品久久久中文字幕一区| 日韩高清亚洲日韩精品一区二区| 亚洲av伦理一区二区| 国产精品久久一区二区三区|