• 国庆作业day6


    服务器

    1. #include
    2. #define IP "192.168.101.66"
    3. #define PORT 6666
    4. int main(int argc, const char *argv[])
    5. {
    6. //创建套接字
    7. int fd = socket(AF_INET, SOCK_STREAM, 0);
    8. if(fd < 0){
    9. ERR_MSG("socket");
    10. return -1;
    11. }
    12. struct sockaddr_in sin;
    13. sin.sin_family = AF_INET;
    14. sin.sin_port = htons(PORT);
    15. sin.sin_addr.s_addr = inet_addr(IP);
    16. int reuse = 1;
    17. if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
    18. {
    19. ERR_MSG("setsockopt");
    20. return -1;
    21. }
    22. //绑定IP和端口
    23. if(bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0){
    24. ERR_MSG("bind");
    25. return -1;
    26. }
    27. //将套接变成被动监听状态
    28. if(listen(fd, 64) < 0){
    29. ERR_MSG("listen");
    30. return -1;
    31. }
    32. //接收连接后的套接字
    33. struct sockaddr_in cin;
    34. socklen_t len = sizeof(cin);
    35. int newfd = accept(fd, (struct sockaddr *)&sin, &len);
    36. if(newfd < 0){
    37. ERR_MSG("accept");
    38. return -1;
    39. }
    40. sqlite3 *pdb;
    41. //打开函数库
    42. if(sqlite3_open("./sq.db", &pdb) != SQLITE_OK){
    43. fprintf(stderr, "sqlite3_open __%d__\n", __LINE__);
    44. return -1;
    45. }
    46. printf("sqlite3_open success\n");
    47. char sql[128] = "CREATE TABLE IF NOT EXISTS passwd (name char primary key, passwd char);";
    48. char *errmsg = NULL;
    49. //创建表格
    50. if(sqlite3_exec(pdb, sql, NULL, NULL, &errmsg) != SQLITE_OK){
    51. fprintf(stderr, "sqlite3_exec __%d__\n", __LINE__);
    52. return -1;
    53. }
    54. char buf[128] = "";
    55. ssize_t res = 0;
    56. char name[64] = "";
    57. char pwd[64] = "";
    58. char *p = NULL;
    59. int i = 0;
    60. while(1){
    61. //接收
    62. res = recv(newfd, buf, sizeof(buf), 0);
    63. if(res < 0){
    64. ERR_MSG("recv");
    65. return -1;
    66. }else if(0 == res){
    67. printf("读取完毕\n");
    68. break;
    69. }
    70. printf("%s __%d__\n",buf, __LINE__);
    71. i = 0;
    72. while(buf[i] != ' '){
    73. i++;
    74. }
    75. bzero(name, sizeof(name));
    76. bzero(pwd, sizeof(pwd));
    77. strcpy(name, buf);
    78. name[i] = 0;
    79. p = &buf[i+1];
    80. strcpy(pwd, p);
    81. //将账号密码写入数据库
    82. bzero(sql, sizeof(sql));
    83. sprintf(sql, "insert into passwd values(\"%s\", %s);", name, pwd);
    84. printf("%s\n", sql);
    85. char *emsg;
    86. if(sqlite3_exec(pdb, sql, NULL, NULL, &emsg) != SQLITE_OK){
    87. fprintf(stderr, "sqlite3_exec __%d__\n", __LINE__);
    88. return -1;
    89. }
    90. printf("注册成功\n");
    91. }
    92. //关闭函数库
    93. if(sqlite3_close(pdb) != SQLITE_OK){
    94. fprintf(stderr, "sqlite3_close __%d__\n", __LINE__);
    95. return -1;
    96. }
    97. //关闭套接字
    98. close(fd);
    99. close(newfd);
    100. return 0;
    101. }

    客户端

    1. #include
    2. #define IP "192.168.101.66"
    3. #define PORT 6666
    4. int main(int argc, const char *argv[])
    5. {
    6. //创建套接字
    7. int fd = socket(AF_INET, SOCK_STREAM, 0);
    8. if(fd < 0){
    9. ERR_MSG("socket");
    10. return -1;
    11. }
    12. //连接服务器
    13. struct sockaddr_in sin;
    14. sin.sin_family = AF_INET;
    15. sin.sin_port = htons(PORT);
    16. sin.sin_addr.s_addr = inet_addr(IP);
    17. if(connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0){
    18. ERR_MSG("connect");
    19. return -1;
    20. }
    21. char s[128] = "";
    22. while(1){
    23. //发送
    24. printf("请输入:账户 密码 >>>");
    25. bzero(s, sizeof(s));
    26. fgets(s, sizeof(s), stdin);
    27. s[strlen(s)-1] = 0;
    28. if(0 == strcmp(s, "quit")){
    29. printf("客户端退出\n");
    30. break;
    31. }
    32. if(send(fd, s, sizeof(s), 0) < 0){
    33. ERR_MSG("send");
    34. return -1;
    35. }
    36. }
    37. //关闭套接字
    38. close(fd);
    39. return 0;
    40. }

  • 相关阅读:
    产品探秘:智影AI——你的创意视频制作神器!
    现代图片性能优化及体验优化指南 - 响应式图片方案
    易基因|疾病研究:DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守
    前端面试宝典
    深度学习(18):nerf、nerf-pytorch代码运行与学习
    用cmd命令进行磁盘清理(主要是系统盘)
    c刷题【五】
    Java 配置 HTTP/Socks 代理竟能如此简单
    牛视源码定制,抖音矩阵系统,别和谐啊、、、
    webpack 使用与配置
  • 原文地址:https://blog.csdn.net/darkestdying/article/details/133582240