江南大学TCPIP群聊私聊设计(5)
}
iLens = sizeof(cli);
3. 服务器接收函数,此函数接收客户端的注册信息,并将此信息存储至user结构体链表中。
//接收注册信息 void rec_regist(){ int iLen = sizeof(users); int pos = 0; int iRecv_user;
char *buf_rev = (char *)malloc(iLen); user = tail.next; while(pos iRecv_user recvfrom(sSocket,buf_rev+pos,iLen,0,(sockaddr*)&cli,&iLens); if(iRecv_user==SOCKET_ERROR){ printf(\ break; } pos += iRecv_user; } memcpy(user,buf_rev,iLen); printf(\用户%s注册成功.\\n\ printf(\ user->isOnline = 0; user->next = (struct users *)malloc(sizeof(struct users)); user = user->next; tail.next = user; user->id = 0; } = 4. 服务器接收登陆函数,此函数为服务器接收当前用户输入登陆信息,并将此信息存储至userlogin结构体中。 //登陆函数 void login() { } 5. 服务器检测函数:此函数检测客户端的登陆用户名和密码是否正确,通过与本地存储的所有用户比较得出此用户的用户名和密码是否正确,如果正确,user_state返回2。如果用户已登录,user->isOnline= 2; 如果用户密码正确但未登录,user->isOnline = 1;否则user->isOnline = 0; //检测函数 void check(){ int i=1; int iSend_local; int iLen; char buf_send[1]; user= head.next; while(i==user->id){ char username[10]; char passward[10]; printf(\请输入登陆用户名:\\n\scanf(\printf(\请输入登陆密码:\\n\scanf(\ struct hostent *phostinfo = gethostbyname(\ char *p = inet_ntoa (* ((struct in_addr *)(*phostinfo->h_addr_list)) ); strcpy(userlogin.username,username); strcpy(userlogin.passward,passward); strncpy(user->ip, p, sizeof(user->ip)- 1); user->ip[19] = '\\0'; } //输入的用户名和密码正确 if(strcmp(login.username,user->username)==0 } user = user->next; i = i+1; &&strcmp(login.passward,user->passward)==0){ //登录成功并已经在线时,不允许登录 if(login.isOnline == user->isOnline){ } else{ } login.isOnline = 1; printf(\此用户已经登录.\\n\printf(\登录成功.\\n%user->isOnline = 1; login.isOnline = 2; break; *buf_send = (char)login.isOnline; iSend_local = sendto(sSocket,buf_send,sizeof(buf_send),0,(struct sockaddr*)&cli,iLens); } 6. 服务器接收函数:此函数为服务器接收到客户端请求群聊,得到所有在线的人数并得到其ip,将客户端需要发送的消息发送给各个本地服务器。 //群聊 void recv_message(){ int i = 1; int iRec_local,iSend_local; recv(); if(login.isOnline == 2){ user = head.next; while(i!=0){ char buf_rev[1024]; iRec_local = recvfrom(sSocket,buf_rev,sizeof(buf_rev),0,(sockaddr*)&cli,&iLens); //放消息,此消息为用户名字信息 if(iRec_local==SOCKET_ERROR) printf(\ else printf(\ while(user->id!=0){ printf(\ printf(\ if(user->ip!=NULL&&user->isOnline==1){ printf(\当前在线用户:%s\\n\ cli.sin_addr.s_addr = inet_addr(user->ip); //户端ip iSend_local sendto(sSocket,buf_rev,sizeof(buf_rev),0,(struct sockaddr*)&cli,iLens); } user = user->next; } if (stricmp(buf_rev, \ break; } } } 重置客= } else if(login.isOnline== 1){ } else printf(\用户登录失败,未注册或密码错误.\\n\printf(\此用户已经登录,不可重复登录.\\n\ 7. 服务器接收函数:服务器接收到私聊请求执行此函数,服务器得到所有在线人数并将其返回给客户端,客户端选择要私聊的人并由服务器转发给其本地服务器。 //私聊 void recv_message_s(){ int pos = 0; int i = 1; int num = 0; int iRec_local,iSend_local; if(login.isOnline == 2){ while(i!=0){ char buf_rev[1024]; char buf_revip[1024]; iRec_local = recvfrom(sSocket,buf_rev,sizeof(buf_rev),0,(sockaddr*)&cli,&iLens); //放消息,此消息为用户名字信息 if(iRec_local==SOCKET_ERROR) printf(\ else printf(\ user = head.next; while(user->id!=0){ if(user->ip!=NULL&&user->isOnline == 1){
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




