亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? coms.c

?? 飛鴿傳書協議的linux實現,使用多線程實現的
?? C
字號:
/********************************************************** *Filename: coms.c *Author:   蔡業桂 *Date:     2009-5-21 * *主要的數據結構、全局變量和包的解析與生成 *********************************************************/#include "ipmsg.h"#include "coms.h"#include <semaphore.h>#include <pthread.h>#include <sys/types.h>#include <pwd.h>#include <sys/utsname.h>#include <assert.h>const char allHosts[] = "255.255.255.255"; //廣播用地址int msgSock; //消息int tcpSock; //文件struct passwd* pwd; struct utsname sysName;char workDir[FILENAME];int utf8;gsNode sendFHead, getFHead; //發送和接收文件列表msgList mList; //接受到的消息列表pthread_mutex_t sendFMutex=PTHREAD_MUTEX_INITIALIZER; //發送文件pthread_mutex_t getFMutex=PTHREAD_MUTEX_INITIALIZER;  //接收文件pthread_mutex_t msgMutex=PTHREAD_MUTEX_INITIALIZER;   //消息隊列pthread_mutex_t usrMutex=PTHREAD_MUTEX_INITIALIZER;   //消息隊列sem_t waitNonEmpty, waitNonFull; //消息列表信號量/*解析接受到的字符串*/int msgParser(char *msg, int size, command* com)//, struct sockaddr_in *peer){  char *start;  char *pos;  char outStr[COMLEN];  int min;  int index=0,colonCount, tmp;    if ((msg==NULL)||(com==NULL))    return -1;  if (utf8)  {    g2u(msg, size, outStr, sizeof(outStr));    start = outStr;  }  else start = msg;    bzero(com, sizeof(command));  while (index<5)  {    pos = strchr(start, ':');    if (pos==NULL)      break;        colonCount=1;    while(*(pos+1) == ':')    {      pos++;      colonCount++;    }    if (colonCount % 2 == 0) //偶數個:表示不是分割符    {      start = pos+1;      continue;    }          switch (index)    {    case 0:      com->version = atoi(start);      break;    case 1:      com->packetNo = atoi(start);      break;    case 2:      min = sizeof(com->senderName)<(pos-start)?sizeof(com->senderName):(pos-start);      memcpy(com->senderName, start, min);       com->senderName[min]='\0';       break;    case 3:      min = sizeof(com->senderHost)<(pos-start)?sizeof(com->senderHost):(pos-start);      memcpy(com->senderHost, start, min);       com->senderHost[min]='\0';      break;    case 4:      com->commandNo = atoi(start);      break;    default:      break;    }    start = pos+1;    index++;  }  strncpy(com->additional, start, MSGLEN);  if (com->commandNo & IPMSG_FILEATTACHOPT)  {    tmp = strlen(com->additional);    com->fileList = getFilelist(start+tmp+1);  }  index++;    return index;      }/*生成要發送的message*/int msgCreater(char* msg, command* com, size_t msgLen){  int len, curLen, tmp, fileNo;  char fileName[FILENAME], dest[COMLEN];  filenode *curFile;    if ((dest==NULL)||(com==NULL))    return -1;    len = snprintf(dest, sizeof(dest), "%d:%d:%s:%s:%d:%s",                  com->version,                  com->packetNo,                  com->senderName,                  com->senderHost,                  com->commandNo,                  com->additional);  tmp = sizeof(dest) - len - 1;  if (com->commandNo & IPMSG_FILEATTACHOPT)  {    fileNo = 0;    curFile = com->fileList;    while ((curFile != NULL) && (tmp>0))    {      if (getFileName(fileName, curFile->fileName, sizeof(fileName))<0)      {        printf("msgCreater: get fileName error.\n");        return -1;      }      addColon(fileName, sizeof(fileName));                  if (curFile->fileType == 1)        curLen = snprintf(dest+len+1, tmp, "%d:%s:%s:%s:1:\a",                          fileNo, fileName, curFile->fileSize, curFile->mtime);      else if (curFile->fileType == 2)         curLen = snprintf(dest+len+1, tmp, "%d:%s:%s:%s:2:\a",                          fileNo, fileName, curFile->fileSize, curFile->mtime);      else      {        printf("Unsupported file type.\n");        continue;      }      fileNo++;      curFile = curFile->next;      len += curLen;      tmp -= curLen;    }      }  if (utf8)    u2g(dest, sizeof(dest), msg, msgLen);  else strncpy(msg, dest, msgLen);    return 0;}//分析待接收文件列表/*comFiles格式為xx:xx:xx:\a*/filenode* getFilelist(const char* comFiles){  char eachFile[NAMELEN];  const char *pos, *backsplash_a, *colon, *start;  filenode *head=NULL, *tail=NULL;  int index, colonCount=0, temp, min;    assert((comFiles!=NULL));  start = comFiles;  while (1)  {    backsplash_a = strchr(start, '\a');    if (backsplash_a==NULL)      break;    if (tail==NULL)      head = tail = (filenode*)malloc(sizeof(filenode));    else    {      tail->next = (filenode*)malloc(sizeof(filenode));      tail = tail->next;    }        tail->next = NULL;    index = 0;        pos = start;    while(1)    {      colon = memchr(pos, ':', backsplash_a - pos);      if (colon == NULL)        break;      colonCount=1;      while(*(colon+1) == ':')      {        colon++;        colonCount++;      }      if (colonCount % 2 == 0) //偶數個:表示不是分割符      {        pos = colon+1;        continue;      }            switch(index)      {      case 0:        sscanf(start, "%x", &tail->fileNo); //sscanf遇到':'也會結束        break;      case 1:        min = (sizeof(tail->fileName)-1)<(colon-start)?(sizeof(tail->fileName)-1):(colon-start);        memcpy(tail->fileName, start, min);        tail->fileName[min] = '\0';        delColon(tail->fileName, sizeof(tail->fileName));//::  ----> :        break;      case 2:        min = (sizeof(tail->fileSize)-1)<(colon-start)?(sizeof(tail->fileSize)-1):(colon-start);        memcpy(tail->fileSize, start, min);        tail->fileSize[min] = '\0';        break;      case 3:        min = (sizeof(tail->mtime)-1)<(colon-start)?(sizeof(tail->mtime)-1):(colon-start);        memcpy(tail->mtime, start, min);        tail->mtime[min] = '\0';        break;      case 4:        sscanf(start, "%x", &tail->fileType); //sscanf遇到':'也會結束        break;      case 5:        min = (sizeof(tail->otherAttrs)-1)<(colon-start)?(sizeof(tail->otherAttrs)-1):(colon-start);        memcpy(tail->otherAttrs, start, min);        tail->otherAttrs[min] = '\0';        break;      default:        break;      }      start = colon+1;      pos = start;      index++;    }    start = backsplash_a + 1;  }  return head;}//相關數據結構的初始化與清理void initCommand(command *com, unsigned int flag){  if (com == NULL)    return;  bzero(com, sizeof(command));  com->version = 1;  com->packetNo = (unsigned int)time(NULL);  strncpy(com->senderName, pwd->pw_name, sizeof(com->senderName));  strncpy(com->senderHost, sysName.nodename, sizeof(com->senderHost));  com->commandNo = flag;  return;}void deCommand(command *com) //delete fileList{  filenode *cur;  cur = com->fileList;  while (cur!=NULL)  {    com->fileList = cur->next;    free(cur);    cur = com->fileList;  }  com->fileList = NULL;}void initGsNode(gsNode *gs){  if (gs == NULL)    return;  bzero(gs, sizeof(gsNode));  gs->tcpSock = -1;  gs->packetNo = -1;}void deGsNode(gsNode *gs) //delete fileList & tragetDir{  filenode *curFile;  if (gs == NULL)    return;  while ((curFile=gs->fileList.next)!=NULL)  {    gs->fileList.next = curFile->next;    free(curFile);  }  if (gs->targetDir != NULL)    free(gs->targetDir);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区精华液 | 成人高清免费观看| 精品嫩草影院久久| 国产自产视频一区二区三区| 久久久午夜精品理论片中文字幕| 国产毛片精品视频| 国产精品免费av| 色哟哟日韩精品| 天天av天天翘天天综合网色鬼国产 | 免费成人性网站| 精品国产髙清在线看国产毛片| 精彩视频一区二区三区| 欧美国产精品久久| 欧美在线三级电影| 蜜臀av亚洲一区中文字幕| 2020国产精品久久精品美国| 97精品久久久午夜一区二区三区 | 久久久久久免费| 不卡的av在线播放| 亚洲成av人片www| 精品福利在线导航| 91色九色蝌蚪| 青椒成人免费视频| 国产精品黄色在线观看| 欧美日韩一区二区三区在线看| 美女任你摸久久| 中文字幕第一区二区| 欧美电影影音先锋| 粉嫩av一区二区三区| 婷婷中文字幕综合| 国产精品久久久久精k8| 在线播放一区二区三区| 国产成人精品aa毛片| 亚洲国产精品久久一线不卡| 久久久www免费人成精品| 欧美性猛片aaaaaaa做受| 国产一区二区精品久久| 性久久久久久久久| 亚洲欧美在线高清| 精品国产污污免费网站入口| 91美女在线视频| 国产激情精品久久久第一区二区 | 日韩福利电影在线观看| 日本一区二区视频在线| 日韩一卡二卡三卡四卡| 91影视在线播放| 国内偷窥港台综合视频在线播放| 136国产福利精品导航| 久久国产福利国产秒拍| 日韩美女视频一区二区 | 色综合网色综合| 激情文学综合网| 日日夜夜一区二区| 亚洲女厕所小便bbb| 久久精品一区二区三区不卡牛牛| 欧美日韩国产影片| 91老司机福利 在线| 国产福利一区二区| 久久99久久精品欧美| 亚洲成av人片一区二区| 一区二区三区电影在线播| 国产精品乱人伦| 国产欧美精品在线观看| 精品日韩欧美在线| 制服丝袜亚洲网站| 欧美精品在线观看一区二区| 色哟哟一区二区三区| 91香蕉视频mp4| 91啪在线观看| 91小宝寻花一区二区三区| 成人激情av网| 视频一区国产视频| 视频一区视频二区中文| 婷婷六月综合网| 日本成人中文字幕| 日本最新不卡在线| 狂野欧美性猛交blacked| 另类小说欧美激情| 国产一区二区福利| 国产成人自拍高清视频在线免费播放| 久久99精品久久久久久国产越南 | 日韩亚洲电影在线| 欧美一级理论片| 91精品国产综合久久久久久久久久 | 盗摄精品av一区二区三区| 国产成人精品影院| jiyouzz国产精品久久| 一本大道av一区二区在线播放| 91日韩精品一区| 欧美视频中文一区二区三区在线观看| 色欧美88888久久久久久影院| 色香色香欲天天天影视综合网 | 日韩一级完整毛片| 精品国产乱码久久久久久图片| 337p日本欧洲亚洲大胆精品| 国产欧美1区2区3区| 中文字幕在线不卡视频| 亚洲一区二区不卡免费| 日产欧产美韩系列久久99| 国产一区二区中文字幕| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 成人免费看片app下载| 成人h动漫精品一区二区| 色综合久久久久综合99| 欧美妇女性影城| 2欧美一区二区三区在线观看视频| 国产欧美日韩中文久久| 玉米视频成人免费看| 日韩精品色哟哟| 国产成人精品1024| 欧美色中文字幕| 久久亚洲一区二区三区四区| 成人免费在线观看入口| 丝袜亚洲另类丝袜在线| 国产a区久久久| 欧美高清视频在线高清观看mv色露露十八 | 欧美三级三级三级爽爽爽| 精品国产99国产精品| 国产精品乱码妇女bbbb| 日韩不卡一二三区| 丁香啪啪综合成人亚洲小说| 欧美日韩中文字幕一区二区| 国产亚洲短视频| 舔着乳尖日韩一区| 99在线精品一区二区三区| 欧美精品乱码久久久久久按摩| 国产日产欧美一区二区视频| 亚洲成人一区在线| 国产不卡视频在线观看| 欧美一区二区三区免费在线看| 中文字幕一区在线观看视频| 青青青爽久久午夜综合久久午夜| 97久久超碰精品国产| 久久亚洲二区三区| 视频一区视频二区在线观看| 成人高清免费在线播放| 久久综合九色综合欧美亚洲| 日韩精品一二区| 一本大道久久a久久精二百| 国产日韩在线不卡| 麻豆一区二区在线| 欧美日韩国产影片| 一区二区在线观看免费| 风间由美中文字幕在线看视频国产欧美 | 极品瑜伽女神91| 精品视频免费在线| 亚洲视频一区在线观看| 国产成人av一区二区三区在线| 欧美一区二区在线观看| 亚洲国产综合在线| 91精彩视频在线观看| 综合av第一页| av激情亚洲男人天堂| 国产欧美日本一区视频| 国产成人在线视频网址| 精品sm捆绑视频| 久久精品99久久久| 欧美大片在线观看| 久久国产免费看| 日韩欧美一区二区免费| 天天做天天摸天天爽国产一区| 欧美在线小视频| 一区二区三区视频在线看| 91天堂素人约啪| 亚洲视频每日更新| 99久久99久久久精品齐齐| 国产精品久久免费看| 成人久久18免费网站麻豆| 国产欧美日本一区视频| 成人午夜看片网址| 国产精品狼人久久影院观看方式| 成人av午夜电影| 中文字幕在线不卡国产视频| 99国产精品99久久久久久| 亚洲日本在线天堂| 91久久精品网| 日韩国产精品久久久久久亚洲| 91精品国产91久久综合桃花| 日本视频一区二区| 欧美大尺度电影在线| 国产精品系列在线播放| 国产精品免费视频一区| 色综合一区二区三区| 亚洲第一搞黄网站| 日韩免费高清av| 丰满白嫩尤物一区二区| 亚洲人成亚洲人成在线观看图片| 91福利小视频| 另类小说视频一区二区| 欧美韩国一区二区| 91传媒视频在线播放| 青青草97国产精品免费观看| 久久精品亚洲精品国产欧美 | 国产精品三级电影| 99re这里都是精品| 日韩极品在线观看| 久久精品视频免费| 欧美专区在线观看一区| 久久国产精品99久久人人澡| 国产精品久久久久久久久免费樱桃 |