当前位置: 首页 > news >正文

国庆作业day6

服务器

#include <my_head.h>
#define IP "192.168.101.66"
#define PORT 6666
int main(int argc, const char *argv[])
{//创建套接字int fd = socket(AF_INET, SOCK_STREAM, 0);if(fd < 0){ERR_MSG("socket");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);int reuse = 1;if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0){   ERR_MSG("setsockopt");return -1; }//绑定IP和端口if(bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0){ERR_MSG("bind");return -1;}//将套接变成被动监听状态if(listen(fd, 64) < 0){ERR_MSG("listen");return -1;}//接收连接后的套接字struct sockaddr_in cin;socklen_t len = sizeof(cin);int newfd = accept(fd, (struct sockaddr *)&sin, &len);if(newfd < 0){ERR_MSG("accept");return -1;}sqlite3 *pdb;//打开函数库if(sqlite3_open("./sq.db", &pdb) != SQLITE_OK){fprintf(stderr, "sqlite3_open __%d__\n", __LINE__);return -1;}printf("sqlite3_open success\n");char sql[128] = "CREATE TABLE IF NOT EXISTS passwd (name char primary key, passwd char);";char *errmsg = NULL;//创建表格if(sqlite3_exec(pdb, sql, NULL, NULL, &errmsg) != SQLITE_OK){fprintf(stderr, "sqlite3_exec __%d__\n", __LINE__);return -1;}char buf[128] = "";ssize_t res = 0;char name[64] = "";char pwd[64] = "";char *p = NULL;int i = 0;while(1){//接收res = recv(newfd, buf, sizeof(buf), 0);if(res < 0){ERR_MSG("recv");return -1;}else if(0 == res){printf("读取完毕\n");break;}printf("%s __%d__\n",buf, __LINE__);i = 0;while(buf[i] != ' '){i++;}bzero(name, sizeof(name));bzero(pwd, sizeof(pwd));strcpy(name, buf);name[i] = 0;p = &buf[i+1];strcpy(pwd, p);//将账号密码写入数据库bzero(sql, sizeof(sql));sprintf(sql, "insert into passwd values(\"%s\", %s);", name, pwd);printf("%s\n", sql);char *emsg;if(sqlite3_exec(pdb, sql, NULL, NULL, &emsg) != SQLITE_OK){fprintf(stderr, "sqlite3_exec __%d__\n", __LINE__);return -1;}printf("注册成功\n");}//关闭函数库if(sqlite3_close(pdb) != SQLITE_OK){fprintf(stderr, "sqlite3_close __%d__\n", __LINE__);return -1;}//关闭套接字close(fd);close(newfd);return 0;
}

客户端

#include <my_head.h>
#define IP "192.168.101.66"
#define PORT 6666
int main(int argc, const char *argv[])
{//创建套接字int fd = socket(AF_INET, SOCK_STREAM, 0);if(fd < 0){ERR_MSG("socket");return -1;}//连接服务器struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0){ERR_MSG("connect");return -1;}char s[128] = "";while(1){//发送printf("请输入:账户 密码 >>>");bzero(s, sizeof(s));fgets(s, sizeof(s), stdin);s[strlen(s)-1] = 0;if(0 == strcmp(s, "quit")){printf("客户端退出\n");break;}if(send(fd, s, sizeof(s), 0) < 0){ERR_MSG("send");return -1;}}//关闭套接字close(fd);return 0;
}

http://www.lryc.cn/news/182828.html

相关文章:

  • 李沐深度学习记录4:12.权重衰减/L2正则化
  • 堆--数组中第K大元素
  • ipad使用技巧
  • Windows系统上使用CLion远程开发Linux程序
  • github搜索技巧
  • Python生成器
  • flutter开发实战-使用FutureBuilder异步数据更新Widget
  • 1.2 数据模型
  • 【实用工具】谷歌浏览器插件开发指南
  • 应用层协议——DNS、DHCP、HTTP、FTP
  • XML文件读写
  • Win11 安装 Vim
  • Mac电脑BIM建模软件 Archicad 26 for Mac最新
  • JavaEE-网络编程套接字(UDP/TCP)
  • 微服务技术栈-Gateway服务网关
  • 函数形状有几种定义方式;操作符infer的作用
  • Java / MybatisPlus:JSON处理器的应用,在实体对象中设置对象属性,对象嵌套对象
  • 力扣 -- 1027. 最长等差数列
  • 正则验证用户名和跨域postmessage
  • jsbridge实战1:xcode swift 构建iOS app
  • 零基础部署nginx mysql springboot
  • 6-3 模式匹配
  • SQL JOIN 时 USING 和 ON 的异同
  • 安全学习_开发相关_JNDI介绍(注入)RMILDAP服务
  • C#学生选课及成绩查询系统
  • 【C语言】利用数组处理批量数据(一维数组和二维数组)
  • WPF中, 如何将控件的触发事件绑定到ViewModel
  • 解决Qt msvc编译器 中文显示乱码问题
  • JAVA面经整理(7)
  • CentOS7使用技巧