talk的登录函数
来源:互联网 发布:中国气象数据网吧 编辑:程序博客网 时间:2024/05/22 02:01
rewind(fp);
struct user t;
while (fread(&t,sizeof(struct user),1,fp) == 1) {
if (strcmp(t.name,me.name) == 0) {
if (strcmp(t.passwd,me.passwd) == 0) {
login(me,sockfd);
return 0;
}
else
return 1;
}
}
return 2;
}
static void login(struct user me,int sockfd) {
FILE *fp;
fp = fopen("login.dat","r+");
if (fp == NULL) {
err_ret("open login.dat error");
return ;
}
else {
struct login_user loguser;
rewind(fp);
while (fread(&loguser,sizeof(struct login_user),1,fp) == 1) {
if (strcmp(me.name,loguser.name) == 0) {
if (loguser.online) {
fprintf(stderr,"user is already online\n");
return;
}
else {
loguser.online = true;
struct sockaddr peeraddr;
socklen_t addrlen;
addrlen = sizeof(peeraddr);
if (getpeername(sockfd,&peeraddr,&addrlen) == -1) {
err_ret("getpeername error");
return;
}
off_t offset;
offset = -sizeof(struct login_user);
loguser.useraddr = peeraddr;
if (fseek(fp,offset,SEEK_CUR) != 0) {
err_ret("seek error");
return;
}
if (fwrite(&loguser,sizeof(loguser),1,fp) != 1) {
err_ret("fwrite error");
return;
}
return;
}
}
}
strcpy(loguser.name,me.name);
loguser.online = true;
socklen_t addrlen;
struct sockaddr peeraddr;
#ifdef DEBUG
fprintf(stderr,"login");
#endif
addrlen = sizeof(peeraddr);
if (getpeername(sockfd,&peeraddr,&addrlen) == -1) {
err_ret("getpeername error");
return;
}
loguser.useraddr = peeraddr;
if (fwrite(&loguser,sizeof(loguser),1,fp) !=1) {
err_ret("fwrite error");
return;
}
if (fp != NULL)
fclose(fp);
return;
}
}
在注册文件中查找用户是否已注册,若否,则登录失败,若是,则核查用户名及密码,若用户名或密码错误,返回,否则查看当前用户是否已登录,若没有,则登录(并记住主机地址),否则,提示主机登录失败。。修改一下可以提示远程主机,但这个只是测试而已。。。。
- talk的登录函数
- 我的google talk!
- Group Talk的设计
- talk
- talk
- 一起talk C栗子吧(第五十七回:C语言实例--main函数的参数)
- 久违的talk上线了!
- 一起talk C栗子吧(第六十八回:C语言实例--DIY字符串长度函数的小疑问)
- 一起talk C栗子吧(第一百二十三回:C语言实例--显示变量和函数的地址)
- 一起talk C栗子吧(第一百二十七回:C语言实例--查看main函数的参数)
- [Ruby-talk]对Fixnum与的讨论
- 一些好玩的 Google Talk 签名
- Pidgin 连接 Google Talk 的配置
- A lunch talk带来的启发
- 即将沉陷历史的Google Talk
- 一起Talk Android吧(第六回:Java中的函数)
- Talk the Talk
- Free Talk : 由Java 的学习引出的一段牢骚
- HTML----表单中隐藏域小结
- 键盘输入输出InputstreamReader和OutputStreamWriter综合应用
- 笔记整理(java基础二---常量,变量...数组)
- 笔记整理(java基础三-------面向对象--封装)
- 关于int数组的选择和冒泡排序
- talk的登录函数
- ConcurrentHashMap之实现细节
- RSA和MD5加密
- 笔记整理(java基础四-----面向对象---继承)
- 由OJ提交结果联想到内存页面大小的一些小猜想
- 马士兵的经典名言!!!
- 黑马程序员-----笔记整理(java基础五-------面向对象--多态)
- 经典与智慧
- java举例大全