电子通讯录的网络登录与注册。
#include <stdio.h>
#include <stdlib.h>#include <sqlite3.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include "msg.h"
#define SER_PORT 3333
int handle(void * para,int count,char **value,char **name)
{
if(count != 0)
{
return 1;
}
return 0;
}
int handle1(void * para,int count,char **value,char **name)
{
if(count != 0)
{
return 1;
}
return 0;
}
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Please input server bind ip!\n");
exit(1);
}
int s_len;
int sockfd;
int cfd;
int n_read;
char buffer[1024];
char *errmsg;
char str[100];
char src[100];
sqlite3 * db;
struct message *msg = (struct message *)malloc(sizeof(struct message));
struct message Msg;
struct sockaddr_in ser_addr;
struct sockaddr_in client_addr;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == - 1)
{
perror("socket creat error!");
exit(1);
}
printf("sockfd success!\n");
bzero(&ser_addr,sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
//ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);
ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
ser_addr.sin_port = htons(SER_PORT);
if(bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) == -1)
{
perror("bind error!");
exit(1);
}
printf("bind success!\n");
if(listen(sockfd,5) == -1)
{
perror("listen error!");
exit(1);
}
printf("listen success!\n");
while(1)
{
s_len = sizeof(client_addr);
if((cfd = accept(sockfd,&client_addr,&s_len)) < 0)
{
perror("accept error!");
exit(1);
}
printf("accept success = %s\n",inet_ntoa(client_addr.sin_addr));
while(1)
{
n_read = read(cfd,msg,sizeof(struct message));
if(n_read == 0)
{
printf("client is close!\n");
break;
}
sqlite3_open("taxt.db",&db);
sqlite3_exec(db,"create table key(name text,password text)",NULL,NULL,&errmsg);
int temp = msg->action;
switch(temp)
{
case 1:
//strcpy(src,msg->passwd);
//strcpy(str,msg->name);
sprintf(str,"select * from key where name = '%s' and password = '%s'",msg->name,msg->passwd);
int k = sqlite3_exec(db,str,handle,NULL,&errmsg);
if(k == 0)
{
sqlite3_close(db);
msg->action = 3;
write(cfd,msg,sizeof(struct message));
}
else
{
sqlite3_close(db);
//printf("cao124!\n");
msg->action = 4;
//printf("cao126!\n");
write(cfd,msg,sizeof(struct message));
//printf("hehe\n");
}
break;
case 2:
sprintf(str,"select * from key where name = '%s'",msg->name);
int p = sqlite3_exec(db,str,handle1,NULL,&errmsg);
if(p == 0)
{
sprintf(src,"insert into key(name,password) values('%s','%s')",msg->name,msg->passwd);
sqlite3_exec(db,src,NULL,NULL,&errmsg);
sqlite3_close(db);
msg->action = 5;
write(cfd,msg,sizeof(struct message));
}
else
{
sqlite3_close(db);
msg->action = 6;
write(cfd,msg,sizeof(struct message));
}
break;
}
//printf("recv client send msg:%d %s %s\n",msg->action,msg->name,msg->passwd);
//msg->action = -1;
//write(cfd,msg,sizeof(struct message));
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "msg.h"
#define SER_PORT 3333
int main(int argc, char *argv[])
{
if(argc != 2)
{
printf("Please input connect server ip!\n");
exit(1);
}
int sockfd;
char buffer[1024];
struct message msg;
struct sockaddr_in ser_addr;
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket create error!");
exit(1);
}
bzero(&ser_addr,sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
ser_addr.sin_port = htons(SER_PORT);
if(connect(sockfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) < 0)
{
perror("connect error!");
exit(1);
}
int num;
while(1)
{
login_screen();
scanf("%d",&num);
switch(num)
{
case 1:
bzero(&msg,sizeof(msg));
msg.action = 1;
printf("请输入帐户名:\n");
scanf("%s",msg.name);
printf("请输入密码:\n");
scanf("%s",msg.passwd);
write(sockfd,&msg,sizeof(msg));
read(sockfd,&msg,sizeof(msg));
if(msg.action == 3)
{
printf("该帐号未注册!或用户名以及密码错误!\n");
break;
}
if(msg.action == 4)
{
printf("登录成功!\n");
break;
}
break;
case 2:
bzero(&msg,sizeof(msg));
msg.action = 2;
printf("请输入要注册帐户:\n");
scanf("%s",msg.name);
printf("请输入密码:\n");
scanf("%s",msg.passwd);
write(sockfd,&msg,sizeof(msg));
read(sockfd,&msg,sizeof(msg));
if(msg.action == 5)
{
printf("注册成功!\n");
break;
}
if(msg.action == 6)
{
printf("用户名已存在!\n");
break;
}
break;
}
}
return 0;
}
#include <stdio.h>
void login_screen()
{
printf("+======================+\n");
printf("| WELCOME ! |\n");
printf("| |\n");
printf("| 1.登录 2.注册 |\n");
printf("+======================+\n");
printf("请输入数字选择功能:\n");
}