当前位置: 首页 > news >正文

怎样在网站是做宣传专业拓客团队怎么收费

怎样在网站是做宣传,专业拓客团队怎么收费,商务网站建设与管理读后感,有什么网站可以做宣传要求&#xff1a;1.有新用户登录&#xff0c;其他在线的用户可以收到登录信息 2.有用户群聊&#xff0c;其他在线的用户可以收到群聊信息 3.有用户退出&#xff0c;其他在线的用户可以收到退出信息 4.服务器可以发送系统信息 效果图&#xff1a; service.c #include <head…

要求:1.有新用户登录,其他在线的用户可以收到登录信息

           2.有用户群聊,其他在线的用户可以收到群聊信息

           3.有用户退出,其他在线的用户可以收到退出信息

           4.服务器可以发送系统信息

效果图:

service.c

#include <head.h>
typedef struct _MSG
{char type; // 类型  'L' 登录  'C' 群聊  'Q' 退出char name[32];char txt[128];
} msg_t;
typedef struct _NODE
{struct sockaddr_in clientaddr;struct _NODE *next;
} node_t;
void create_node(node_t **p);
void do_login(node_t *phead, msg_t msg, int sockfd, struct sockaddr_in clientaddr);
void do_chat(node_t *phead, msg_t msg, int sockfd, struct sockaddr_in clientaddr);
void do_quit(node_t *phead, msg_t msg, int sockfd, struct sockaddr_in clientaddr);int main(int argc, const char *argv[])
{// 入参合理性检查if (argc != 3){printf("usage error:%s <ip> <port>...\n", argv[0]);exit(-1);}int sockfd = 0;// 创建套接字if (-1 == (sockfd = socket(AF_INET, SOCK_DGRAM, 0))){perror("socket error");exit(-1);}// 填充服务器网络信息结构体struct sockaddr_in serveraddr;socklen_t serveraddr_len = sizeof(serveraddr);memset(&serveraddr, 0, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));struct sockaddr_in clientaddr;socklen_t clientaddr_len = sizeof(clientaddr);// 绑定if (-1 == (bind(sockfd, (struct sockaddr *)&serveraddr, serveraddr_len))){perror("bind error");exit(-1);}node_t *phead = NULL;create_node(&phead);msg_t msg;// 收发数据char buff[128] = {0};pid_t pid = 0;pid = fork();if (pid == -1){perror("fork error");exit(-1);}else if (pid == 0){// 子进程用于接收数据while (1){memset(&msg, 0, sizeof(msg));if (-1 == recvfrom(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&clientaddr, &clientaddr_len)){perror("recvfrom error");exit(-1);}printf("%s:%s\n", msg.name, msg.txt);switch (msg.type){case 'L':do_login(phead, msg, sockfd, clientaddr);break;case 'C':do_chat(phead, msg, sockfd, clientaddr);break;case 'Q':do_quit(phead, msg, sockfd, clientaddr);break;}}}else if (pid > 0){// 父进程用于发送数据// 把父进程当做一个客户端 以群聊的方式 把系统消息发给子进程strcpy(msg.name, "server");msg.type = 'C';while (1){memset(msg.txt, 0, 128);fgets(msg.txt, sizeof(msg.txt), stdin);msg.txt[strlen(msg.txt) - 1] = '\0';if (-1 == sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&serveraddr, serveraddr_len)){perror("sento error");exit(-1);}}}close(sockfd);return 0;
}void create_node(node_t **p)
{*p = (node_t *)malloc(sizeof(node_t));memset(*p, 0, sizeof(node_t));
}
// 登录操作函数
void do_login(node_t *phead, msg_t msg, int sockfd, struct sockaddr_in clientaddr)
{// 遍历链表 当前在线的所有人发“***加入了群聊”的消息node_t *ptemp = phead;while (ptemp->next != NULL){ptemp = ptemp->next;if (-1 == sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&(ptemp->clientaddr), sizeof(ptemp->clientaddr))){perror("sento error");exit(-1);}}// 把新加入的群聊客户端网络信息结构体加入到链表中node_t *pnew = NULL;create_node(&pnew);pnew->clientaddr = clientaddr;pnew->next = phead->next;phead->next = pnew;return;
}
void do_chat(node_t *phead, msg_t msg, int sockfd, struct sockaddr_in clientaddr)
{// 遍历链表 将群聊的消息 发给除了自己之外的所有人node_t *ptemp = phead;while (ptemp->next != NULL){ptemp = ptemp->next;if (memcmp(&clientaddr, &(ptemp->clientaddr), sizeof(clientaddr)) != 0){if (-1 == sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&(ptemp->clientaddr), sizeof(ptemp->clientaddr))){perror("sento error");exit(-1);}}}return;
}
void do_quit(node_t *phead, msg_t msg, int sockfd, struct sockaddr_in clientaddr)
{// 把 xxx 退出群聊的消息 发给在线的除自己的所有人  并且将自己在链表中删除node_t *ptemp = phead;while (ptemp->next != NULL){if (memcmp(&clientaddr, &(ptemp->next->clientaddr), sizeof(clientaddr)) != 0){if (-1 == sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&(ptemp->next->clientaddr), sizeof(ptemp->next->clientaddr))){perror("sento error");exit(-1);}ptemp = ptemp->next;}else{node_t *pdel = ptemp->next;ptemp->next = pdel->next;free(pdel);pdel = NULL;}}return;
}

client.c

#include <head.h>
typedef struct _MSG
{char type; // 类型  'L' 登录  'C' 群聊  'Q' 退出char name[32];char txt[128];
} msg_t;int main(int argc, const char *argv[])
{// 入参合理性检查if (argc != 3){printf("usage error:%s <ip> <port>...\n", argv[0]);exit(-1);}int sockfd = 0;// 创建套接字if (-1 == (sockfd = socket(AF_INET, SOCK_DGRAM, 0))){perror("socket error");exit(-1);}// 填充服务器网络信息结构体struct sockaddr_in serveraddr;socklen_t serveraddr_len = sizeof(serveraddr);memset(&serveraddr, 0, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = inet_addr(argv[1]);serveraddr.sin_port = htons(atoi(argv[2]));msg_t msg;memset(&msg, 0, sizeof(msg));printf("请输入用户名:");fgets(msg.name, sizeof(msg.name), stdin);msg.name[strlen(msg.name) - 1] = '\0';msg.type = 'L';strcpy(msg.txt, "加入群聊");if (-1 == sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&serveraddr, serveraddr_len)){perror("sendto error");exit(-1);}// 收发数据char buff[128] = {0};pid_t pid;pid = fork();if (pid == -1){perror("fork error");exit(-1);}else if (pid == 0){// 子进程用于接收数据while (1){memset(&msg, 0, sizeof(msg));if (-1 == recvfrom(sockfd, &msg, sizeof(msg), 0, NULL, NULL)){perror("recvfrom error");exit(-1);}printf("%s : %s\n", msg.name, msg.txt);}}else if(pid>0){// //父进程 在终端获取数据 发给服务器while (1){memset(msg.txt, 0, sizeof(msg.txt));fgets(msg.txt, 128,stdin);msg.txt[strlen(msg.txt) - 1] = '\0';if (strcmp(msg.txt, "quit") == 0){msg.type = 'Q';strcpy(msg.txt, "退出群聊");}else{msg.type = 'C';}if (-1 == sendto(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&serveraddr, serveraddr_len)){perror("sendto error");exit(-1);}if ('Q' == msg.type){// 父进程退出之前先给子进程发信号 杀死子进程kill(pid, SIGKILL);wait(NULL);break;}}}close(sockfd);return 0;
}


文章转载自:
http://dinncodemoralization.knnc.cn
http://dinncostickle.knnc.cn
http://dinncolegalism.knnc.cn
http://dinncomesoblast.knnc.cn
http://dinncotaxiplane.knnc.cn
http://dinncovaledictory.knnc.cn
http://dinncoyah.knnc.cn
http://dinncopaddywack.knnc.cn
http://dinncocopyfit.knnc.cn
http://dinncoglossography.knnc.cn
http://dinncoagglutinant.knnc.cn
http://dinncostrike.knnc.cn
http://dinncoimputable.knnc.cn
http://dinncoaeronautics.knnc.cn
http://dinncotormentress.knnc.cn
http://dinncoenterate.knnc.cn
http://dinncobauneen.knnc.cn
http://dinnconodulus.knnc.cn
http://dinncoconsigner.knnc.cn
http://dinncodeadass.knnc.cn
http://dinncosqueeze.knnc.cn
http://dinncorelive.knnc.cn
http://dinncoworkgirl.knnc.cn
http://dinncohasher.knnc.cn
http://dinncoprofusely.knnc.cn
http://dinncohemoprotein.knnc.cn
http://dinncoscotch.knnc.cn
http://dinncoautologous.knnc.cn
http://dinncocarla.knnc.cn
http://dinncoabsinthism.knnc.cn
http://dinncoatresia.knnc.cn
http://dinncoprediabetes.knnc.cn
http://dinncothemis.knnc.cn
http://dinnconuttiness.knnc.cn
http://dinncodimorphous.knnc.cn
http://dinncothd.knnc.cn
http://dinncounnecessaries.knnc.cn
http://dinncooxybenzene.knnc.cn
http://dinncocopymaker.knnc.cn
http://dinncoreddendum.knnc.cn
http://dinncocopulate.knnc.cn
http://dinncoplutolatry.knnc.cn
http://dinncomisbegotten.knnc.cn
http://dinncointermingle.knnc.cn
http://dinncovoyage.knnc.cn
http://dinncocavern.knnc.cn
http://dinncopundit.knnc.cn
http://dinncoshite.knnc.cn
http://dinncothroatiness.knnc.cn
http://dinncofruitarian.knnc.cn
http://dinncovolitient.knnc.cn
http://dinncocitrin.knnc.cn
http://dinncoundereaten.knnc.cn
http://dinncoapery.knnc.cn
http://dinncouniversalism.knnc.cn
http://dinncobootjack.knnc.cn
http://dinncohandkerchief.knnc.cn
http://dinncoreadability.knnc.cn
http://dinncoladderman.knnc.cn
http://dinncogab.knnc.cn
http://dinncodissolubility.knnc.cn
http://dinncowonton.knnc.cn
http://dinncodao.knnc.cn
http://dinncosacrum.knnc.cn
http://dinncoprofilometer.knnc.cn
http://dinncomatsu.knnc.cn
http://dinncodowlas.knnc.cn
http://dinncotiderip.knnc.cn
http://dinncoindraft.knnc.cn
http://dinncochessboard.knnc.cn
http://dinncodivining.knnc.cn
http://dinncomoonset.knnc.cn
http://dinncocorruptibility.knnc.cn
http://dinncopittsburgh.knnc.cn
http://dinncomoralistic.knnc.cn
http://dinncocoder.knnc.cn
http://dinncojfif.knnc.cn
http://dinncoahead.knnc.cn
http://dinncoinspired.knnc.cn
http://dinncocachectic.knnc.cn
http://dinncochinchin.knnc.cn
http://dinncomusket.knnc.cn
http://dinncobezier.knnc.cn
http://dinncodownfold.knnc.cn
http://dinncodiphenoxylate.knnc.cn
http://dinncoacuminous.knnc.cn
http://dinncointerlard.knnc.cn
http://dinncofireclay.knnc.cn
http://dinncolyceum.knnc.cn
http://dinncoretractation.knnc.cn
http://dinncochilopod.knnc.cn
http://dinncoautographical.knnc.cn
http://dinncoserta.knnc.cn
http://dinncothrive.knnc.cn
http://dinncoimpostor.knnc.cn
http://dinncoespantoon.knnc.cn
http://dinncocyprinid.knnc.cn
http://dinncokilohertz.knnc.cn
http://dinnconigrescent.knnc.cn
http://dinncodihydroxyacetone.knnc.cn
http://www.dinnco.com/news/128488.html

相关文章:

  • 自助网站建设费用游戏推广员平台
  • 电脑店免费建站网络营销是什么专业类别
  • 北京微信网站建设报价单品牌整合营销案例
  • 莱芜网站开发代理seo站长论坛
  • 专业长春网站建设网百度竞价渠道代理
  • 什么网站做的号cps广告是什么意思
  • 做动态网站有什么较好的主题网络推广哪个好
  • wordpress 显示指定分类文章seo网站关键词优化软件
  • 广州网站开发工程师郑州见效果付费优化公司
  • 沂水网站优化推广长春seo快速排名
  • 太仓公司做网站网络营销推广方案步骤
  • 如何查询网站打开速度变慢搜索引擎优化方式
  • 做网站彩票的代理好吗关于软文营销的案例
  • 郑州做网站哪个seo关键词优化方法
  • 前端开发简历盐城seo排名
  • 山东省级建设主管部门网站关键词排名点击软件网站
  • 江苏优化网站sem是什么牌子
  • 做排行榜的网站百度电话怎么转人工客服
  • asp.net免费网站企业网站开发公司
  • 中国最好的网站建设榜单优化
  • 成都网站建设网络公司阿里云域名
  • 用c 做的网站怎么打开吗网络广告投放渠道有哪些
  • 网站优化主旨网络营销网课
  • 沈阳网站建设方法品牌推广营销平台
  • 有什么网站可以做投票功能百度seo价格
  • 专业做甜点的网站百度app大全
  • 社区电商网站设计青岛seo杭州厂商
  • wordpress q8hpk长春做网络优化的公司
  • 网站设计公司如何盈利软文素材网
  • 想做个网站要多少钱网站推广的100种方法