英英词典client

来源:互联网 发布:电脑超频软件 编辑:程序博客网 时间:2024/05/01 11:55
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sqlite3.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


#define  N  16
#define  R  1   //  user register
#define  L  2   //  user login
#define  Q  3   //  query word
#define  H  4   //  history record
#define  COL 50


#define DATABASE "my.db"


typedef struct 
{
int type;
char name[N];
char data[256];   // password or word or remark
} MSG;


void do_register(int socketfd, MSG *msg)
{
msg->type = R;
printf("input name : ");
scanf("%s", msg->name);
printf("input password : ");
scanf("%s", msg->data);
send(socketfd, msg, sizeof(MSG), 0);
recv(socketfd, msg, sizeof(MSG), 0);
printf("register : %s\n", msg->data);


return;
}


int do_login(int socketfd, MSG *msg)
{
msg->type = L;
printf("input name : ");
scanf("%s", msg->name);
printf("input password : ");
scanf("%s", msg->data);
send(socketfd, msg, sizeof(MSG), 0);
recv(socketfd, msg, sizeof(MSG), 0);
if (strncmp(msg->data, "OK", 3) == 0) 
{
printf("login : OK\n");
return 1;
}
printf("login : %s\n", msg->data);
return 0;
}


void do_query(int socketfd, MSG *msg)
{
msg->type = Q;
while ( 1 )
{
printf("plz input word");
scanf("%s", msg->data);
if (strcmp(msg->data, "#") == 0) break;
send(socketfd, msg, sizeof(MSG), 0);
recv(socketfd, msg, sizeof(MSG), 0);
printf("    ");
printf("%s\n", msg->data);
}


return;
}


void do_history(int socketfd, MSG *msg)
{
msg->type = H;
send(socketfd, msg, sizeof(MSG), 0);
while ( 1 )
{
recv(socketfd, msg, sizeof(MSG), 0);
if (msg->data[0] == '\0') break;
printf("%s\n", msg->data);
}


return;
}


int main(int argc, char *argv[])
{
int socketfd ;
struct sockaddr_in server_addr;
MSG msg;
if (argc < 3)
{
printf("Usage : %s <serv_ip> <serv_port>\n", argv[0]);
exit(-1);
}
if ((socketfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
{
perror("fail to socket");
exit(-1);
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = PF_INET;
server_addr.sin_addr.s_addr = inet_addr(argv[1]);
server_addr.sin_port = htons(atoi(argv[2]));
if (connect(socketfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
{
perror("fail to connect");
exit(-1);
}
int n;
while ( 1 )
{
printf("************************************\n");
printf("* 1: register   2: login   3: quit *\n");
printf("************************************\n");
printf("please choose : ");
if (scanf("%d", &n) <= 0)
{
perror("scanf");
exit(-1);
}
switch ( n )
{
case 1 :
do_register(socketfd, &msg);
break;
case 2 :
if (do_login(socketfd, &msg) == 1)
goto next;
break;
case 3 :
close(socketfd);
exit(0);
}
}
next:
while ( 1 )
{
printf("***********************************************\n");
printf("* 1: query_word   2: history_record   3: quit *\n");
printf("***********************************************\n");
printf("please choose : ");

if (scanf("%d", &n) < 0)
{
perror("scanf");
exit(-1);
}
switch ( n )
{
case 1 :
do_query(socketfd, &msg);
break;
case 2 :
do_history(socketfd, &msg);
break;
case 3 :
close(socketfd);
exit(0);
}
}


return 0;
}
原创粉丝点击