网络编程在线英英词典之注册模块实现(三)

客户端注册模块

//注册
int do_register(int sockfd, MSG_T *msg){
	printf("register ...\n");

	memset(msg, 0, sizeof(MSG_T));//将msg内存全部置为0
	msg->type = MSGTYPE_R;
	printf("input name:");scanf("%s", msg->name);getchar();  //输入注册用户名
	printf("input passwd:");scanf("%s", msg->data);getchar();//输入注册用户密码

	if(send(sockfd, msg, sizeof(MSG_T),0) < 0){  //将消息发送给服务器
		printf("fail to send register msg.\n");
		return -1;
	}
	if(recv(sockfd, msg, sizeof(MSG_T), 0) < 0){  //接收服务器发来的消息
		printf("fail to register.\n");
		return -1;
	}
	printf("%s\n", msg->data);
	return 1;
}

服务器注册模块

	//注册
int do_register(int sockfd, MSG_T *msg, sqlite3 *db){
	char sql[128] = {0};
	char *errmsg = NULL;

	sprintf(sql, "insert into usr values('%s','%s');", msg->name, msg->data);//将格式化的数据写入sql
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){  //执行sql语句    
		printf("%s\n", errmsg);
		memset(msg->data, 0, strlen(msg->data));
		sprintf(msg->data, "usr(%s) already exist !", msg->name);
	}else{
		printf("client usr(%s) registe success\n", msg->name);
		memset(msg->data, 0, strlen(msg->data));
		strcpy(msg->data, "register ok!");
	}
	//返回应答
	if(send(sockfd, msg, sizeof(MSG_T), 0) < 0){  //发送消息给客户端(给客户端做出应答)
		printf("fail to send\n");
		return 0;
	}
	return 1;
}

编译通过后,就可以进行用户注册测试
右边命令终端是在客户端中进行用户注册操作
左边命令终端是在数据库中查看是否创建成功
打开数据库验证后,出现zhangsan|123,确实成功注册了
网络编程在线英英词典之注册模块实现(三)_第1张图片
注册模块功能已经实现
下面进行登录模块功能的实现

你可能感兴趣的:(在线词典,网络,数据库,sqlite)