代码中的ip地址写的都是回环测试ip,如果要在两个电脑之间,请修改代码中ip地址一行。另外查询单词的dict.txt文件您需要自己准备,然后修改路径。
写的不好,您多担待。
服务器部分:
头文件声明(服务器)
#ifndef _SERVER_H
#define _SERVER_H
#include<stdio.h>
#include<time.h>
#include<sqlite3.h>
#include<stdlib.h>
#include<unistd.h>
#include<strings.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define N 256
#define M 1024//用于缓冲区
typedef struct msgg{
unsigned int cmd;//标志请求
char name[N];//用户名
char password[N];//密码
}msg;
typedef struct worr{
unsigned int cmd;//标志请求
char word[N];//所要查询的单词
char time[N];//查询时间
char explain[N];
char name[N];
}data;
typedef struct sockaddr *SA;
int enroll(msg *pack);
int enter(msg *pack);
int history(data *word);
int init_network();
int look(data *word);
int sec(msg *pack);
int sec1(data *word);
#endif
主函数(服务器)
#include "server.h"
int main(int argc, char *argv[])
{
int lis_fd;
int soc_fd;
int ret;
struct sockaddr_in cliaddr;
msg pack;
data word;
socklen_t addrlen = 0;
char buf[M] = "\0";
lis_fd = init_network();
if (-1 == lis_fd)
{
printf("init network fail\n");
return -1;
}
else
{
printf("init succeed, have fun ^0^\n");
}
bzero(&pack, sizeof(pack));
while (1)
{
printf("等待接收...\n");
soc_fd = accept(lis_fd, (SA)&cliaddr, &addrlen);
if (-1 == soc_fd)
{
perror("accept");
return -1;
}
while (1)
{
if (recv(soc_fd, buf, M, 0) > 0)
{
printf("接收信息成功\n");
memcpy(&pack, buf, sizeof(pack));
printf("%s %s\n",pack.name, pack.password);
ret = sec(&pack);
if (1 == ret)
{
bzero(buf, sizeof(buf));
strcpy(buf, "ok");
send(soc_fd, buf, M, 0);
printf("注册成功信息已发出\n");
break;
}
else if (-1 == ret)
{
bzero(buf, sizeof(buf));
strcpy(buf, "no");
send(soc_fd, buf, M, 0);
printf("注册失败信息已发出\n");
break;
}
else if (2 == ret)
{
bzero(buf, sizeof(buf));
strcpy(buf, "ok");
send(soc_fd, buf, M, 0);
printf("登陆成功信息已发出\n");
bzero(buf, sizeof(buf));
while(recv(soc_fd, buf, M, 0) > 0)
{
printf("接收数据包成功\n");
memcpy(&word, buf, sizeof(word));
if (0 == strncmp(word.word, "#", 1))
break;
ret = sec1(&word);
if (1 == ret)
{
printf("查到了此单词\n");
bzero(buf, sizeof(buf));
strcpy(buf, "ok");
send(soc_fd, buf, M, 0);
printf("查询成功信息已发出\n");
bzero(buf, sizeof(buf));
memcpy(buf, &word, sizeof(word));
send(soc_fd, buf, M, 0);
}
else if (-1 == ret)
{
printf("查不到此单词\n");
bzero(buf, sizeof(buf));
strcpy(buf, "no");
send(soc_fd, buf, M, 0);
printf("查询失败信息已发出\n");
}
else if (2 == ret)
{