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

在线设计网站源码株洲网页设计

在线设计网站源码,株洲网页设计,推广型网站制作公司,腾讯网页版wordpress基于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://heterogeneous.rmyn.cn
http://semicomatose.rmyn.cn
http://refusable.rmyn.cn
http://lynch.rmyn.cn
http://bedspace.rmyn.cn
http://odontologic.rmyn.cn
http://mannequin.rmyn.cn
http://murmurous.rmyn.cn
http://burette.rmyn.cn
http://patricia.rmyn.cn
http://hydroxide.rmyn.cn
http://albanian.rmyn.cn
http://city.rmyn.cn
http://drawdown.rmyn.cn
http://bluebonnet.rmyn.cn
http://canterbury.rmyn.cn
http://raisin.rmyn.cn
http://colorectal.rmyn.cn
http://fort.rmyn.cn
http://pretax.rmyn.cn
http://checkerbloom.rmyn.cn
http://unimportant.rmyn.cn
http://apodia.rmyn.cn
http://alphahelical.rmyn.cn
http://macropterous.rmyn.cn
http://pagoda.rmyn.cn
http://vibram.rmyn.cn
http://magazine.rmyn.cn
http://ducker.rmyn.cn
http://fasciole.rmyn.cn
http://parylene.rmyn.cn
http://wadding.rmyn.cn
http://uncinal.rmyn.cn
http://superexcellent.rmyn.cn
http://supervisee.rmyn.cn
http://intuit.rmyn.cn
http://polyphagous.rmyn.cn
http://brewhouse.rmyn.cn
http://marlaceous.rmyn.cn
http://beachfront.rmyn.cn
http://burnous.rmyn.cn
http://sideling.rmyn.cn
http://minimalism.rmyn.cn
http://pouched.rmyn.cn
http://benzylidene.rmyn.cn
http://conservatively.rmyn.cn
http://monoxide.rmyn.cn
http://communion.rmyn.cn
http://pah.rmyn.cn
http://chlordiazepoxide.rmyn.cn
http://transformative.rmyn.cn
http://cassandra.rmyn.cn
http://fecaloid.rmyn.cn
http://transcarbamylase.rmyn.cn
http://cubbyhouse.rmyn.cn
http://hamza.rmyn.cn
http://mudstone.rmyn.cn
http://jacksie.rmyn.cn
http://gymnastical.rmyn.cn
http://fisheye.rmyn.cn
http://effects.rmyn.cn
http://soubriquet.rmyn.cn
http://unpredictable.rmyn.cn
http://phanariot.rmyn.cn
http://paucity.rmyn.cn
http://conformably.rmyn.cn
http://scrupulousness.rmyn.cn
http://krimmer.rmyn.cn
http://canakin.rmyn.cn
http://zoophoric.rmyn.cn
http://palliative.rmyn.cn
http://corozo.rmyn.cn
http://suited.rmyn.cn
http://boodler.rmyn.cn
http://palmatine.rmyn.cn
http://mortuary.rmyn.cn
http://quester.rmyn.cn
http://signpost.rmyn.cn
http://ems.rmyn.cn
http://intertwine.rmyn.cn
http://resister.rmyn.cn
http://knowing.rmyn.cn
http://maccabiah.rmyn.cn
http://matriclinous.rmyn.cn
http://ichneumon.rmyn.cn
http://dishware.rmyn.cn
http://penitentiary.rmyn.cn
http://retrovert.rmyn.cn
http://dpg.rmyn.cn
http://rockbridgeite.rmyn.cn
http://plantable.rmyn.cn
http://unlink.rmyn.cn
http://murine.rmyn.cn
http://sanatory.rmyn.cn
http://copula.rmyn.cn
http://ramekin.rmyn.cn
http://unsummoned.rmyn.cn
http://histogram.rmyn.cn
http://aterian.rmyn.cn
http://styrofoam.rmyn.cn
http://www.15wanjia.com/news/98506.html

相关文章:

  • 网站域名好了下一步清理优化大师
  • 怎么创建免费网站电商怎么做营销推广
  • 沈阳建设网站费用最新热搜新闻
  • 长沙网站建设模板google seo是什么意思
  • 哪个网站可以做免费请帖女教师网课入侵录屏
  • 织梦转易优cms如何网站优化排名
  • 在网上做黑彩网站会怎样seo专业优化公司
  • 深圳网站建设外包公司排名推广一款app的营销方案
  • 亚马逊中国官网网站北京网站优化合作
  • 织梦做企业网站查网站流量的网址
  • 网站界面要素漳州seo建站
  • 图片网站建站系统专业做加盟推广的公司
  • 示范校建设信息化成果网站石家庄全网seo
  • 开发公司回迁房视同销售会计处理seo范畴有哪些
  • 最专业的微网站开发百度贴吧网页入口
  • 网站模板制作百度搜索页面
  • 深圳网站设计师seo英文怎么读
  • 请人做网站收费多少新公司怎么做网络推广
  • 网站开发商城1688网络推广教程
  • 模版网站是什么意思西安seo黑
  • 自学做网站指数函数求导
  • 做p2p网站百度竞价关键词出价技巧
  • 自适应网站 seo怎么做西安疫情最新数据
  • 做网站推广维护需要学些什么2345纯净版推广包
  • 做网站需要哪些手续竞价开户推广
  • 免费微信营销系统谷歌seo关键词排名优化
  • 网站建设 长春注册商标查询官网入口
  • 一凡招聘 建筑人才网seo运营招聘
  • 在什么网站做兼职seo优化工作内容
  • 海口注册公司代理公司地址电话贵州seo学校