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

怎样做交互式网站推广方式有哪些

怎样做交互式网站,推广方式有哪些,温州企业网站建设费用,优动网站基于UDP的网络聊天室 项目需求: 如果有用户登录,其他用户可以收到这个人的登录信息如果有人发送信息,其他用户可以收到这个人的群聊信息如果有人下线,其他用户可以收到这个人的下线信息服务器可以发送系统信息 服务器端代码 #in…

基于UDP的网络聊天室

项目需求:

  1. 如果有用户登录,其他用户可以收到这个人的登录信息
  2. 如果有人发送信息,其他用户可以收到这个人的群聊信息
  3. 如果有人下线,其他用户可以收到这个人的下线信息
  4. 服务器可以发送系统信息

服务器端代码

#include<myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.117.74"
#define PRINT_ERR(msg)                                      do                                                      {                                                       printf("%s,%d,%s\n", __FILE__, __LINE__, __func__); perror(msg);                                        exit(-1);                                           } while (0)typedef struct
{char code; //操作码char name[32];char txt[128];
} msg_t;
//链表结构体
typedef struct _NODE
{struct sockaddr_in c_addr;struct _NODE *next;
} node_t;void creat_link(node_t **head);
int do_register(int sockfd, msg_t msg, struct sockaddr_in clientaddr, node_t *phead);
int do_group_chat(int sockfd, msg_t msg, struct sockaddr_in clientaddr, node_t *phead);
int quit_group_chat(int sockfd, msg_t msg, struct sockaddr_in clientaddr, node_t *phead);int main(int argc, const char *argv[])
{//创建套接字int sockfd;if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){PRINT_ERR("socket error");}//创建服务器网络信息结构体struct sockaddr_in serviceaddr;memset(&serviceaddr, 0, sizeof(serviceaddr));serviceaddr.sin_family = AF_INET;serviceaddr.sin_addr.s_addr = inet_addr(argv[1]);serviceaddr.sin_port = htons(atoi(argv[2]));socklen_t serviceaddr_len = sizeof(serviceaddr);//将服务器网络信息结构体与套接字绑定if (bind(sockfd, (struct sockaddr *)&serviceaddr, serviceaddr_len) == -1){PRINT_ERR("bind error");}//创建客户端网络信息结构体struct sockaddr_in clientaddr;memset(&clientaddr, 0, sizeof(clientaddr));socklen_t clientaddr_len = sizeof(clientaddr);msg_t msg;//创建父子进程pid_t pid;pid = fork();if (pid == -1){PRINT_ERR("fork error");}else if (pid == 0){//子进程//接受数据并处理//定义链表头节点node_t *phead = NULL;creat_link(&phead);phead->next = NULL;while (1){memset(&msg, 0, sizeof(msg));memset(&clientaddr, 0, sizeof(clientaddr));if ((recvfrom(sockfd, &msg, sizeof(msg), 0, (struct sockaddr *)&clientaddr, &clientaddr_len)) == -1){PRINT_ERR("recvfrom error");}printf("%8s : [%s]\n", msg.name, msg.txt);switch (msg.code){case 'L':do_register(sockfd, msg, clientaddr, phead);break;case 'C':do_group_chat(sockfd, msg, clientaddr, phead);break;case 'Q':quit_group_chat(sockfd, msg, clientaddr, phead);break;}}}else if (pid > 0){//父进程//发系统消息msg.code='C';strcpy(msg.name,"server");while(1){fgets(msg.txt,128,stdin);msg.txt[strlen(msg.txt)-1]='\0';if(sendto(sockfd,&msg,sizeof(msg_t),0,(struct sockaddr *)&serviceaddr,serviceaddr_len)==-1){PRINT_ERR("sendto error");}}}close(sockfd);return 0;
}
//创建链表头节点函数
void creat_link(node_t **head)
{*head = (node_t *)malloc(sizeof(node_t));
}
//登录操作
int do_register(int sockfd, msg_t msg, struct sockaddr_in clientaddr, node_t *phead)
{//遍历链表将登录信息发送给所以人node_t *p = phead;while (p->next != NULL){p = p->next;if (sendto(sockfd, &msg, sizeof(msg_t), 0, (struct sockaddr *)&(p->c_addr), sizeof(p->c_addr)) == -1){PRINT_ERR("recvfrom error");}}//将登录的客户端信息插入保存在链表//头插//定义一个新的指针保存客户端信息node_t *newp = NULL;creat_link(&newp);newp->c_addr = clientaddr;newp->next = phead->next;phead->next = newp;return 0;
}int do_group_chat(int sockfd, msg_t msg, struct sockaddr_in clientaddr, node_t *phead)
{//遍历链表,将消息发给除自己之外的所有人node_t *p = phead;while (p->next != NULL){p = p->next;//判断链表客户端信息是否是自己//是自己就不发送if (memcmp(&(p->c_addr), &clientaddr, sizeof(clientaddr))){if (sendto(sockfd, &msg, sizeof(msg_t), 0, (struct sockaddr *)&(p->c_addr), sizeof(p->c_addr)) == -1){PRINT_ERR("recvfrom error");}}}return 0;
}
//退出群聊操作
int quit_group_chat(int sockfd, msg_t msg, struct sockaddr_in clientaddr, node_t *phead)
{node_t *p = phead;while (p->next != NULL){//判断链表客户端信息是否是自己//是自己就不发送并且将自己的客户端信息在链表内删除if (memcmp(&(p->next->c_addr), &clientaddr, sizeof(clientaddr))){p = p->next;if (sendto(sockfd, &msg, sizeof(msg_t), 0, (struct sockaddr *)&(p->c_addr), sizeof(p->c_addr)) == -1){PRINT_ERR("recvfrom error");}}else{node_t *pnew;pnew = p->next;p->next = pnew->next;pnew->next = NULL;free(pnew);pnew = NULL;}}return 0;
}

客户端代码

#include<myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.117.74"
#define PRINT_ERR(msg)                                      do                                                      {                                                       printf("%s,%d,%s\n", __FILE__, __LINE__, __func__); perror(msg);                                        exit(-1);                                           } while (0)typedef struct
{char code; //操作码 char name[32];char txt[128];
} msg_t;int main(int argc, const char *argv[])
{//创建套接字int sockfd;if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){PRINT_ERR("socket error");}//创建服务器网络信息结构体struct sockaddr_in serviceaddr;memset(&serviceaddr, 0, sizeof(serviceaddr));serviceaddr.sin_family = AF_INET;serviceaddr.sin_addr.s_addr = inet_addr(argv[1]);serviceaddr.sin_port = htons(atoi(argv[2]));socklen_t serviceaddr_len = sizeof(serviceaddr);//给服务器发送登录数据包msg_t msg;memset(&msg, 0, sizeof(msg_t));msg.code = 'L';printf("请输入用户名:");fgets(msg.name, 32, stdin);msg.name[strlen(msg.name) - 1] = '\0';strcpy(msg.txt, "加入群聊");if (sendto(sockfd, &msg, sizeof(msg_t), 0, (struct sockaddr *)&serviceaddr, serviceaddr_len) == -1){PRINT_ERR("sendto error");}//创建父子进程pid_t pid;pid = fork();if (pid == -1){PRINT_ERR("fork error");}else if (pid == 0){//子进程//接受数据并处理while (1){//每次循环前将msg置零memset(&msg, 0, sizeof(msg));//接受服务器发过来的信息并打印到终端上if (recvfrom(sockfd, &msg, sizeof(msg_t), 0, NULL, NULL) == -1){PRINT_ERR("recvfrom error");}printf("%8s:[%s]\n", msg.name, msg.txt);}}else if (pid > 0){//父进程//发送消息while (1){   //memset会把name清除msg.code = 'C';fgets(msg.txt, 128, stdin);msg.txt[strlen(msg.txt) - 1] = '\0';if (strcmp(msg.txt, "quit") == 0){msg.code = 'Q';strcpy(msg.txt, "退出群聊");}if (sendto(sockfd, &msg, sizeof(msg_t), 0, (struct sockaddr *)&serviceaddr, serviceaddr_len) == -1){PRINT_ERR("sendto error");}if (strcmp(msg.txt, "退出群聊") == 0){break;}}kill(pid,SIGKILL);wait(NULL);close(sockfd);}return 0;
}

http://www.hrbkazy.com/news/11848.html

相关文章:

  • 网站制作公司属于广告发布者吗竞价推广账户托管服务
  • 鹿城做网站百度秒收录
  • 十堰网站制作公司电话seo关键词库
  • 网站建设市场推广招聘竞价排名规则
  • 河南省建筑市场监管平台自媒体seo优化
  • 高端网站建设专家seo优化基础教程pdf
  • 网站开发人员岗位职责网站流量查询服务平台
  • 山东网站建设最便宜北京百度关键词优化
  • 广东泰通建设有限公司网站广西疫情最新消息
  • 文化传媒网站建设百度搜索关键词数据
  • 织梦网站熊掌号改造怎么做it培训机构学费一般多少
  • 淘宝店铺代运营一般怎么收费不错宁波seo公司
  • wordpress plugins插件小小课堂seo自学网
  • 贵州一帆建设工程有限公司网站长沙疫情最新数据消息
  • 在哪里建网站怎么做seo
  • 深圳做网站 龙华信科网站宣传文案
  • 做微信推送的网站张北网站seo
  • 如何查看网站使用什么程序做的营销策略包括哪些方面
  • 公司网站怎么做才能有官网二字深圳网络营销推广招聘网
  • 做企业网站的要点谷歌seo博客
  • 唐山网站制作app东莞全网推广
  • 宝安高端网站设计怎么样百度投放广告联系谁
  • 住房各城乡建设网站惠州seo公司
  • 网站开发课程总结百度咨询电话 人工客服
  • asp网站只能打开首页福建百度推广
  • 网站建设费在会计上怎么入账百度网址大全网址导航
  • 钓鱼网站在线制作论文收录网站有哪些
  • 做app网站公司哪家好产品营销策划
  • 北京昌盛宏业网站建设网站seo文章该怎么写
  • 武汉地区网站建设怎么推广产品