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

天津高端网站建设企业博客程序seo

天津高端网站建设企业,博客程序seo,香港服务器需要备案吗,专做美容师招聘网站基于tcp和epoll在线聊天室 说明服务端代码 说明 服务端:实现了验证用户是否已经存在(支持最大64用户连接)支持广播用户进入退出聊天室以及用户聊天内容。   这里只提供里服务端代码,如果想要看客户端代码点击这里。 服务端代码…

基于tcp和epoll在线聊天室

  • 说明
  • 服务端代码

说明

  服务端:实现了验证用户是否已经存在(支持最大64用户连接)支持广播用户进入退出聊天室以及用户聊天内容。
  这里只提供里服务端代码,如果想要看客户端代码点击这里。

服务端代码

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <arpa/inet.h>
#include <time.h>
#include <sys/epoll.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);
int is_exist(char * username);
void broadcast(char *r,char *n);char Userlist[64][20] = {0};
int Userfdlist[64] = {0};//./app 192.168.5.166  8888
int main(int argc,char *argv[])
{	int opt = 1;//建立监听套接字int socketfd = Socket(AF_INET,SOCK_STREAM,0);//需要进行重用地址及其端口号setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));//绑定信息编写服务器信息SIN   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);Bind(socketfd,(SA*)&serverinfo,addrlen);//监听Listen(socketfd,MAXBACKLOG);//epoll创建根节点int epollfd = epoll_create(1024);//添加socketfd文件描述符至内核 红黑树struct epoll_event event;event.events = EPOLLIN;			//事件成员event.data.fd = socketfd;		//数据epoll_ctl(epollfd,EPOLL_CTL_ADD,socketfd, &event);//读写while(1){struct epoll_event events[10];int count = epoll_wait(epollfd,events,10,-1);for(int i = 0; i< count;i++){if(events[i].events == EPOLLIN){if(events[i].data.fd == socketfd){//wait client connectSIN clientinfo;struct epoll_event event;int  clientaddrlen =sizeof(SA);int newfd = Accept(socketfd,(SA*)&clientinfo,&clientaddrlen);printf("客户端地址:%s 端口号:%d\n",inet_ntoa(clientinfo.sin_addr),ntohs(clientinfo.sin_port));//read usernamechar namebuff[20];read(newfd,namebuff,sizeof(namebuff));if(is_exist(namebuff)){write(newfd,"已存在",sizeof("已存在"));close(newfd);}else{//put newfd into Red-Black Treeevent.events = EPOLLIN;			//事件成员event.data.fd = newfd;			//数据epoll_ctl(epollfd,EPOLL_CTL_ADD,newfd, &event);write(newfd,"登录成功",sizeof("登录成功"));	//save userfd & usernamefor(int j=0;j<64;j++)if(strlen(Userlist[j])==0){Userfdlist[j]=event.data.fd;strcpy(Userlist[j],namebuff);break;}	char r[50];sprintf(r,"%s %s",namebuff,"进入聊天室");printf("%s\n",r);broadcast(r,namebuff);}}else{//readchar readbuff[512] = {0};int len = read(events[i].data.fd,readbuff,sizeof(readbuff));//get name and poschar namebuff[20] = {0};int key = 0;for(int i=0;i<10;i++)if(strstr(readbuff,Userlist[i])){strcpy(namebuff,Userlist[i]);key=i;break;}if(len > 0 && strlen(readbuff)!=0){printf("%s\n",readbuff);broadcast(readbuff,namebuff);if(strstr(readbuff,"退出")){strcpy(Userlist[key],"\0");Userfdlist[key] = 0;epoll_ctl(epollfd,EPOLL_CTL_DEL,events[i].data.fd,NULL);close(events[i].data.fd);}}else if(len <= 0){epoll_ctl(epollfd,EPOLL_CTL_DEL,events[i].data.fd,NULL);close(events[i].data.fd);}}}}}//关闭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 broadcast(char *r,char *n)
{for(int i=0 ; i<64 ;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.yidumall.com/news/65372.html

相关文章:

  • 做二手货的网站广州网站优化排名
  • 西安政府网站建设现状汕头网站推广排名
  • 湖南省住建厅官网信息公开做网站怎么优化
  • 外贸网站建设上海谷歌关键词优化怎么做
  • 专业的画册设计网站网络推广渠道分类
  • 苏州网站建设师百度网站推广怎么收费
  • 数据网站怎么做的官网排名优化
  • 广西南宁b2b网站建设seo推广营销靠谱
  • 网站seo课程企业营销策划是做什么的
  • 做商城网站系统营销对企业的重要性
  • 做股权众筹的网站优化大师官方下载
  • 刷QQ砖的网站咋做网络销售怎么找客户
  • 网站前端设计外包公司专业网站优化排名
  • 广东省政府网站建设百度网盘客户端下载
  • 购买网站做网页游戏百度秒收录软件工具
  • wordpress友情链接直接留空白代码搜索引擎营销seo
  • dedecms做网站有多快东莞海外网络推广
  • 网站首页被k多久恢复百度搜索引擎的原理
  • redis 移动 wordpress如何做网站优化seo
  • 网站授权管理系统怎么做想做游戏推广怎么找游戏公司
  • 江苏建设人才考试网是啥网站优化问题
  • 网站推广方法主要有怎么让百度收录
  • 2018做网站的软件无锡谷歌推广
  • 湖州建设局投标网站自己怎么优化网站排名
  • 为什么上不了建设银行个人网站最近最火的关键词
  • 广州 环保 凡人网站建设网站seo外包靠谱吗
  • asp公司企业网站模板源代码南京高端品牌网站建设
  • wordpress电子书下载seo顾问推推蛙
  • 长沙小升初有什么做试卷的网站百度知道合伙人答题兼职入口
  • 小型企业管理软件哪个好站长工具seo查询5g5g