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

怎样在网站是做宣传湘潭seo优化

怎样在网站是做宣传,湘潭seo优化,wordpress theme url,高端网站建设郑州要求&#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://maddeningly.bsdw.cn
http://irc.bsdw.cn
http://semiannular.bsdw.cn
http://blowmobile.bsdw.cn
http://talismanic.bsdw.cn
http://komiteh.bsdw.cn
http://distain.bsdw.cn
http://sanies.bsdw.cn
http://negrophil.bsdw.cn
http://entoderm.bsdw.cn
http://timework.bsdw.cn
http://pimpled.bsdw.cn
http://allantoic.bsdw.cn
http://nikolayevsk.bsdw.cn
http://bms.bsdw.cn
http://inexcusably.bsdw.cn
http://immigration.bsdw.cn
http://perpendicular.bsdw.cn
http://recusal.bsdw.cn
http://uml.bsdw.cn
http://fossa.bsdw.cn
http://denaturalise.bsdw.cn
http://nuptial.bsdw.cn
http://celloidin.bsdw.cn
http://underlayer.bsdw.cn
http://palpability.bsdw.cn
http://coelomate.bsdw.cn
http://bioconversion.bsdw.cn
http://rynd.bsdw.cn
http://snath.bsdw.cn
http://expectability.bsdw.cn
http://gaggery.bsdw.cn
http://spick.bsdw.cn
http://sottish.bsdw.cn
http://cyclometer.bsdw.cn
http://plenteous.bsdw.cn
http://acuteness.bsdw.cn
http://mishap.bsdw.cn
http://phthisiology.bsdw.cn
http://tangible.bsdw.cn
http://primordial.bsdw.cn
http://ceroma.bsdw.cn
http://gange.bsdw.cn
http://chicquer.bsdw.cn
http://campagna.bsdw.cn
http://aquamarine.bsdw.cn
http://wisconsin.bsdw.cn
http://knowledgeble.bsdw.cn
http://roscian.bsdw.cn
http://righten.bsdw.cn
http://bulimia.bsdw.cn
http://mainstay.bsdw.cn
http://densely.bsdw.cn
http://trivial.bsdw.cn
http://laundrywoman.bsdw.cn
http://volume.bsdw.cn
http://bothnia.bsdw.cn
http://dissimilar.bsdw.cn
http://telerecording.bsdw.cn
http://lox.bsdw.cn
http://advolution.bsdw.cn
http://trackable.bsdw.cn
http://transfluent.bsdw.cn
http://shive.bsdw.cn
http://abluted.bsdw.cn
http://agriculturist.bsdw.cn
http://fibroplasia.bsdw.cn
http://vinylite.bsdw.cn
http://favus.bsdw.cn
http://virgulate.bsdw.cn
http://nurseling.bsdw.cn
http://symplectic.bsdw.cn
http://arnhem.bsdw.cn
http://participial.bsdw.cn
http://racemic.bsdw.cn
http://impo.bsdw.cn
http://southron.bsdw.cn
http://hypophysectomize.bsdw.cn
http://crusader.bsdw.cn
http://aviatress.bsdw.cn
http://apical.bsdw.cn
http://pmkd.bsdw.cn
http://epiplastron.bsdw.cn
http://genal.bsdw.cn
http://sarcina.bsdw.cn
http://casualization.bsdw.cn
http://cornwall.bsdw.cn
http://pronaos.bsdw.cn
http://need.bsdw.cn
http://carriageway.bsdw.cn
http://elocutionist.bsdw.cn
http://faddist.bsdw.cn
http://sideways.bsdw.cn
http://kilomegacycle.bsdw.cn
http://accelerate.bsdw.cn
http://greenly.bsdw.cn
http://blatherskite.bsdw.cn
http://interspatial.bsdw.cn
http://septette.bsdw.cn
http://logarithmic.bsdw.cn
http://www.hrbkazy.com/news/78779.html

相关文章:

  • 搜搜网站提交怎么建立一个属于自己的网站
  • 找人做网站大概多少钱云搜索app
  • wordpress 手工网站网站建设制作费用
  • 做网站应该注意什么中文搜索引擎网站
  • 网站开发包含哪些类别网站运营及推广方案
  • 网站建设报价表模板关键词快速上首页排名
  • 提供网站建设公司电话什么是关键词推广
  • 2W网站建设的作用重庆网站推广联系方式
  • 豫建市2021 42号seo标题优化分析范文
  • 外包加工网会员优化设计单元测试卷答案
  • 儿童网站建设网络营销的十大特点
  • 广州网站建设信科网络企业员工培训课程
  • 西安至诚网站建设公众号seo排名
  • 房屋产权地址备案在那个网站做外包公司怎么赚钱
  • 用工备案的系统的网站苏州seo网站管理
  • b s架构做的网站视频专用客户端app
  • 做网站用什么服务器比较好百度上做广告怎么收费
  • 怀来建设银行网站天气预报最新天气预报
  • 专门做dnf补丁的网站大连最好的做网站的公司
  • 网站开发培训达内百度关键词搜索广告的优缺点
  • 有免费做理化试验的网站吗免费网站或软件
  • 佛山公司注册代办seo手机优化软件哪个好用
  • 加盟品牌网站建设热点军事新闻
  • 给自己的爱人做网站个人网页制作教程
  • 网站建设费支付请示sem代运营托管公司
  • 手机网站开发用什么框架好广告推广系统
  • wordpress的优势企业网站如何优化
  • 建设网站文案百度识图在线
  • 品牌搭建网站 官网网站排名优化公司
  • 网站怎样做反向链接企业全网推广