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

长沙网站优化推广seo短视频加密路线

长沙网站优化推广,seo短视频加密路线,wordpress 多用户,网站备份还原多线程在线聊天室 概述客户端服务端 概述 客户端实现了判单用户登录结果、防止单回车字符发送、保存和显示历史聊天记录(仅自己)、退出聊天室功能。   服务端实现了验证用户是否已经存在(支持最大64用户连接)支持广播用户进入退…

多线程在线聊天室

  • 概述
  • 客户端
  • 服务端

概述

  客户端实现了判单用户登录结果、防止单回车字符发送、保存和显示历史聊天记录(仅自己)、退出聊天室功能。
  服务端实现了验证用户是否已经存在(支持最大64用户连接)支持广播用户进入退出聊天室以及用户聊天内容。

客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <semaphore.h>
#include <time.h>typedef struct sockaddr  SA;
typedef struct sockaddr_in  SIN;
#define MAXBACKLOG   100
int Socket(int domain,int type,int protocol);
int Connect(int sockfd,struct sockaddr * serv_addr,int addrlen);
void *son_fun(void * arg);
void save(const char * dbuff,const char * nbuff);
void list_history_msg(const char * nbuff);
int main(int argc,char *argv[])
{	char namebuff[512]={0};pthread_t id;//建立监听套接字int socketfd = Socket(AF_INET,SOCK_STREAM,0);//connectSIN   serverinfo;serverinfo.sin_family = AF_INET;serverinfo.sin_port   = htons(atoi(argv[2]));serverinfo.sin_addr.s_addr =  inet_addr(argv[1]);int addrlen = sizeof(SIN);Connect(socketfd,(SA*)&serverinfo,addrlen);//send nameprintf("请输入昵称:\n");gets(namebuff);write(socketfd,namebuff,sizeof(namebuff));char b[20];read(socketfd,b,sizeof(b));if(strstr(b,"已存在")){printf("已存在\n");close(socketfd);return 0;		}//print serve infoprintf("登入成功,服务器:%s 端口:%d\n",inet_ntoa(serverinfo.sin_addr),ntohs(serverinfo.sin_port));//make son threadpthread_create(&id,NULL,son_fun,(void *)&socketfd);//w while(1){//timetime_t t = time(NULL);struct tm *tinfo = localtime(&t);//msgchar readbuff[512] = {0};gets(readbuff);//prevent "\n" send to serve and save to dataif(strlen(readbuff)==0) continue;//determine wheather it is "ls"if(strcmp(readbuff,"ls") == 0) {list_history_msg(namebuff);continue;}//determine wheather it is "quit"if(strcmp(readbuff,"quit") == 0){char sendbuff[618] = {0};sprintf(sendbuff,"%s : %s%s",namebuff,asctime(tinfo),"退出聊天");write(socketfd,sendbuff,sizeof(sendbuff));close(socketfd);exit(0);}//sendchar sendbuff[618] = {0};sprintf(sendbuff,"%s : %s%s",namebuff,asctime(tinfo),readbuff);write(socketfd,sendbuff,sizeof(sendbuff));//save datasave(sendbuff,namebuff);}//关闭close(socketfd);return 0;
}
void list_history_msg(const char * nbuff)
{char path[128];char *line = NULL;size_t len = 0;sprintf(path,"./userdata/%s.txt",nbuff);FILE * fp = fopen(path,"a+");printf("********聊天记录*********\n");while(getline(&line , &len , fp) != -1)printf("%s",line);printf("************************\n");free(line);fclose(fp);
}
void save(const char * dbuff,const char * nbuff)
{char path[128];sprintf(path,"./userdata/%s.txt",nbuff);FILE * fp = fopen(path,"a+");fprintf(fp,"%s\n",dbuff);fclose(fp);
}int Socket(int domain,int type,int protocol)
{int socketFd = socket(domain,type,protocol);if(socketFd == -1){perror("socket");exit(1);}return socketFd;
}
int Connect (int sockfd,struct sockaddr * serv_addr,int addrlen)
{int val = connect(sockfd,serv_addr,addrlen);if(val == -1){perror("connect");exit(1);}return 0;
}
void *son_fun(void * arg)
{int readpipefd = *((int *)arg);char readbuff[512]={0};while(1){memset(readbuff,0,sizeof(readbuff));if(read(readpipefd,readbuff,sizeof(readbuff))>0){printf("%s\n\n",readbuff);}else{close(readpipefd);pthread_exit(NULL);}}
}

服务端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <semaphore.h>typedef struct sockaddr  SA;
typedef struct sockaddr_in  SIN;
#define MAXBACKLOG   100int Socket(int domain,int type,int protocol);
int Bind(int sockfd,struct sockaddr * my_addr,int addrlen);
int Listen(int s,int backlog);
int Accept(int s,struct sockaddr * addr,int * addrlen);
void *son_fun(void * arg);
int is_exist(char * username);
void broadcast(char *r,char *n);char Userlist[64][20] = {0};
int Userfdlist[64] = {0};int main(int argc,char *argv[])
{	//建立监听套接字int socketfd = Socket(AF_INET,SOCK_STREAM,0);//需要进行重用地址及其端口号int  opt = 1;setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));//绑定信息编写服务器信息SIN   serverinfo;serverinfo.sin_family = AF_INET;		//协议IPV4serverinfo.sin_port   = htons(atoi(argv[2]));	//网络字节序(大端字节序)与主机字节序(小端字节序)  serverinfo.sin_addr.s_addr =  inet_addr(argv[1]);int addrlen = sizeof(SIN);Bind(socketfd,(SA*)&serverinfo,addrlen);//监听Listen(socketfd,MAXBACKLOG);//读写while(1){//等待连接SIN clientinfo;int  clientaddrlen = sizeof(SA);int newfd = Accept(socketfd,(SA*)&clientinfo,&clientaddrlen);printf("客户端地址:%s 端口号:%d\n",inet_ntoa(clientinfo.sin_addr),ntohs(clientinfo.sin_port));//创建子线程pthread_t id;pthread_create(&id,NULL,son_fun,(void *)&newfd);}//关闭close(socketfd);return 0;
}
int is_exist(char * username)
{for(int i = 0 ; i < 10; i++){if(strcmp(username,Userlist[i]) == 0)return 1;}return 0;
}
void *son_fun(void * arg)
{int readfd = *((int *)arg);char readbuff[512] = {0};char namebuff[ 20] = {0};read(readfd,namebuff,sizeof(namebuff));//determine wherther it is existif(is_exist(namebuff)){write(readfd,"已存在",sizeof("已存在"));close(readfd);pthread_exit(NULL);}else{write(readfd,"登录成功",sizeof("登录成功"));char r[50];sprintf(r,"%s %s",namebuff,"进入聊天室");printf("%s\n",r);broadcast(r,namebuff);}//save username and userfdfor(int i=0;i<10;i++){if(strlen(Userlist[i])==0){strcpy(Userlist[i],namebuff);Userfdlist[i] = readfd;break;}}while(1){memset(readbuff,0,sizeof(readbuff));if(read(readfd,readbuff,sizeof(readbuff))>0){if(strlen(readbuff)>0){//printf("%s\n\n",readbuff);//broadcastbroadcast(readbuff,namebuff);if(strstr(readbuff,"退出聊天"))for(int i=0;i<10;i++)if(strcmp(Userlist[i],namebuff)==0){printf("%s\n",readbuff);strcpy(Userlist[i],"\0");close(readfd);pthread_exit(NULL);}}}else{close(readfd);pthread_exit(NULL);}}
}
void broadcast(char *r,char *n)
{for(int i=0 ; i<10 ;i++)//if it is a user and not himselfif(strcmp(Userlist[i],n)!=0 && strlen(Userlist[i])!=0)write(Userfdlist[i],r,strlen(r));
}
int Socket(int domain,int type,int protocol)
{int socketFd = socket(domain,type,protocol);if(socketFd ==-1){perror("socket");exit(1);}return socketFd;
}
int Bind(int sockfd,struct sockaddr * my_addr,int addrlen)
{int val = bind(sockfd,my_addr,addrlen);if(val){perror("bind");exit(1);}return 0;
}
int Listen(int s,int backlog)
{int val = listen(s,backlog);if(val == -1){perror("listen");exit(1);}return val;
}
int Accept(int s,struct sockaddr * addr,int * addrlen)
{int NEWfd = accept(s,addr,addrlen);if(NEWfd == -1){perror("listen");exit(1);}return NEWfd;
}
http://www.tj-hxxt.cn/news/31984.html

相关文章:

  • 网站建设 趋势有没有专门做策划的公司
  • 网站空间ip需不需要备案外贸网络推广营销
  • 兰州做网站改版的公司想学手艺在哪里可以培训
  • 一个云主机可以做多少网站如何建造一个网站
  • html5素材网站北京优化seo公司
  • 河北省建设安全监督站的网站手机金融界网站
  • 网站备案需要多少钱在线网站seo诊断
  • 网站建设介绍怎么写长沙县网络营销咨询
  • 王烨个人简历百度seo找哪里
  • 太原做网站直通车线上推广策划方案
  • 即墨做砍价小程序最好的网站域名注册免费
  • 做企业网站好处个人接外包项目平台
  • html5 网站框架公司网站制作网络公司
  • wordpress强行全站https郑州seo顾问阿亮
  • 成都网站关键排名北京seo报价
  • 做网站推广费用如何优化网站
  • 软件开发和网站建设哪个好天津seo公司
  • 专业餐饮vi设计公司seo营销推广平台
  • 邢台seo一站式长沙网络营销咨询费用
  • 网站设计与网页配色实例精讲厦门seo推广公司
  • 网站怎么加入百度网盟免费推广方式有哪些
  • 网站后台费用外媒头条最新消息
  • 天眼查企业查询在线官网优化网站seo公司
  • 帮别人设计网站电子商务网站
  • 建筑工程公司注册要求seo基础培训教程
  • 怎么做同学录的网站2345网址导航电脑版官网
  • 各省网站备案时长网络营销顾问工作内容
  • 网页游戏网络游戏优化网站排名解析推广
  • ps做网站导航百度推广售后
  • 营销推广工作内容seo是什么的简称