当前位置: 首页 > 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://www.dt0577.cn/news/53547.html

相关文章:

  • 医院做网站需要多少钱推广普通话宣传语
  • wordpress怎么做弹窗seo岗位有哪些
  • 甘肃网站设计公司关键词搜索爱站
  • wordpress wjj新站seo优化快速上排名
  • 网站建设网站需要什么搜索引擎seo是什么意思
  • app模板网站模板网站推广四个阶段
  • wordpress 评论重复黑帽seo工具
  • 遵义市网站建设热搜词排行榜
  • 怎么做自己的优惠淘网站百度竞价排名商业模式
  • 使用js做网站性能测试有名的seo外包公司
  • 网站域名怎么过户网络营销的方式和手段
  • kkday是哪里做的网站公众号怎么做文章推广
  • 机构单位网站建设方案建立网站的基本流程
  • excel网站建设互联网营销外包推广
  • 做网站的带宽多少钱百度seo关键词优化公司
  • 鞍山企业做网站营销策略
  • 建筑工程网络图怎么画google seo
  • 北京天津网站建设哪家公司好2021年关键词排名
  • 网站加v怎么做廊坊seo优化排名
  • 南昌哪家做网站好百度网盘搜索引擎
  • 茌平网站建设公司seo代理计费系统
  • 建设工程监理自己搜20条优化措施
  • 未来做哪些网站致富志鸿优化网
  • 青岛网站推广系统写一篇软文多少钱
  • 浙江网站建设公司济南做网站公司
  • 网站开发报价单长沙seo优化服务
  • 成品网站源码在线网时代教育培训机构怎么样
  • 广西做网站的公司有哪些seo顾问服务福建
  • 唐山 建设工程信息网站头条关键词排名查询
  • 网站开发 协作平台谷歌网站网址