这个作业已经布置挺久了,最开始两天只是完成了框架内容的填充(框架由老师提供),解决了各种报错,但是陷入了一个更烦的阶段——有很多看不见的错误。前面放弃了一段时间,这两天突发奇想回来反工一下,还好功夫不负有心人,做了两天总算完成了。
目录
程序介绍
该程序分为了客户端和服务端两端,通过网络交互进行查询;前面加入了登录和注册的操作,登录成功以后才能进行查询单词的操作。对于登录和注册的操作利用了数据库(sqlite3)的操作,实现数据的保存,不至于每次都需要先重新注册才能登录。
首先客户端和服务端的搭建
是网络交互的第一步,套接字的创建,网络信息的绑定,网络的连接建立。
客户端:先创建套接字文件,然后声明自己的主机信息(包括网络地址,端口号,交互网络类型)再声明想要连接的服务端的主机信息。最后向客户端发送连接请求。
服务端:也是先创建套接字文件,然后声明自己的主机信息,再进行数据监听,最后从监听到的客户端中提取第一个客户进行连接操作并创建新的套接字文件。
实现代码如下:
sockfd = socket(AF_INET,SOCK_STREAM,0); //选择TCP交互,ipv4网络
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET; //本机信息
serveraddr.sin_port=htons(8888);
serveraddr.sin_addr.s_addr=inet_addr("192.168.3.143");
bind(serverfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)); //绑定信息
//连接分两种
//客户端
connect(sockfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
//服务端
listen(serverfd,10); //监听
clientfd=accept(serverfd,(struct sockaddr *)&clientaddr,&sizeof(serveraddr));//连接
另外为了实现登录和注册的操作服务端还多了一步 —— 数据库的打开和数据库表的创建,用来存储和判断用户的账号和密码
实现代码:
sqlite3 *db;
if( sqlite3_open("./mydict.db",&db) != SQLITE_OK ) //打开数据库文件
{
printf( "%s\n", sqlite3_errmsg(db) );
return -1;
}
sqlite3_exec(db,"create table user(name text not null,passwd text not null)",NULL,NULL,NULL); //在数据库文件中创建表和表内的项
登录注册界面
该