• 国庆作业6


    TCP服务器

    1. #include "head.h"
    2. #define PORT 2580 //端口号
    3. #define IP "192.168.31.219" //本机IP
    4. int main(int argc, const char *argv[])
    5. {
    6. sqlite3* db=NULL;
    7. if(sqlite3_open("./my.db",&db)!=SQLITE_OK)
    8. {
    9. fprintf(stderr,"sqlite3_open %d : %s __%d__\n",\
    10. sqlite3_errcode(db),sqlite3_errmsg(db),__LINE__);
    11. return -1;
    12. }
    13. printf("database open success __%d__\n",__LINE__);
    14. //创建一张表格
    15. char sql[128]="create table if not exists stu (name char,password int);";
    16. char* errmsg=NULL;
    17. if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
    18. {
    19. fprintf(stderr,"sqlite3_exec: %s __%d__\n",errmsg,__LINE__);
    20. return -1;
    21. }
    22. printf("create table stu success\n");
    23. //创建流式套接字
    24. int sfd = socket(AF_INET,SOCK_STREAM,0);
    25. if(sfd<0)
    26. {
    27. ERR_MSG("socket");
    28. return -1;
    29. }
    30. printf("socket create success\n");
    31. //允许端口快速复用
    32. int reuse = 1;
    33. if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
    34. {
    35. ERR_MSG("setsockopt");
    36. return -1;
    37. }
    38. printf("允许端口快速复用成功\n");
    39. //填充地址信息结构体给bind函数绑定使用
    40. //真实地址信息结构体根据地质族指定,AF_INET;man 7 ip
    41. struct sockaddr_in sin;
    42. sin.sin_family = AF_INET; //必须填AF_INET;
    43. sin.sin_port = htons(PORT); //端口号网络字节序,1024-49151
    44. sin.sin_addr.s_addr = inet_addr(IP); //本机IP的网络字节序,ifconfig
    45. //绑定服务器的地址信息》必须绑定
    46. if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    47. {
    48. ERR_MSG("bind");
    49. return -1;
    50. }
    51. printf("bind success\n");
    52. //将套接字转换成被动监听状态
    53. if(listen(sfd,128)<0)
    54. {
    55. ERR_MSG("listen");
    56. return -1;
    57. }
    58. printf("listen success\n");
    59. struct sockaddr_in cin;
    60. socklen_t addrlen = sizeof(cin);
    61. //获取连接成功的客户端信息,生成新的文件描述符
    62. //该文件描述符才是与客户端通信的文件描述符
    63. //int newfd = accept(sfd,NULL,NULL);
    64. int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
    65. if(newfd<0)
    66. {
    67. ERR_MSG("accept");
    68. return -1;
    69. }
    70. printf("[%s:%d] newfd =%d 客户端连接成功__%d__\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
    71. char buf[128]="";
    72. ssize_t res=0;
    73. int flag=0;
    74. while(1)
    75. {
    76. bzero(buf,sizeof(buf));
    77. //接收数据
    78. res=recv(newfd,buf,sizeof(buf),0);
    79. if(res<0)
    80. {
    81. ERR_MSG("recv");
    82. return -1;
    83. }
    84. else if(0==res)
    85. {
    86. printf("[%s:%d] newfd=%d : 客户端下线 __%d__\n",\
    87. inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
    88. break;
    89. }
    90. int i;
    91. char str[128]="";
    92. for(i=0;buf[i]!=' ';i++)
    93. {
    94. str[i]=buf[i];
    95. }
    96. str[i]=buf[i];
    97. char sql[128]="select name from stu;";
    98. char **pre=NULL;
    99. int row,column;
    100. char* errmsg=NULL;
    101. if(sqlite3_get_table(db,sql,&pre,&row,&column,&errmsg)!=SQLITE_OK)
    102. {
    103. fprintf(stderr,"sqlite3_get_table: %s \n",errmsg);
    104. return -1;
    105. }
    106. for(int i=0;i1;i++)
    107. {
    108. for(int j=0;j
    109. {
    110. if(strcmp(str,pre[(i*column)+j])==0)
    111. {
    112. printf("重复注册\n");
    113. flag=1;
    114. }
    115. }
    116. }
    117. if(flag==0){
    118. sqlite3_free_table(pre);
    119. char sql1[128]="";
    120. char* p1=buf+strlen(str);
    121. sprintf(sql1,"insert into stu values(\"%s\",\"%s\");",str,p1);
    122. char* errmsg1 = NULL;
    123. if(sqlite3_exec(db,sql1,NULL,NULL,&errmsg1)!=SQLITE_OK)
    124. {
    125. fprintf(stderr,"sqlite3_exec: %s __%d__\n",errmsg1,__LINE__);
    126. return -1;
    127. }
    128. printf("insert success\n");
    129. if(strcmp(buf,"quit")==0)
    130. break;
    131. //发送数据
    132. strcat(buf," add success");
    133. if(send(newfd,buf,sizeof(buf),0)<0)
    134. {
    135. ERR_MSG("send");
    136. return -1;
    137. }
    138. printf("send success\n");
    139. }
    140. else if(flag==1)
    141. break;
    142. }
    143. //关闭套接字
    144. close(sfd);
    145. close(newfd);
    146. return 0;
    147. }

     TCP客户端

    1. #include "head.h"
    2. #define SER_PORT 2580 //端口号
    3. #define SER_IP "192.168.31.219" //本机IP
    4. int main(int argc, const char *argv[])
    5. {
    6. //创建流式套接字
    7. int sfd = socket(AF_INET,SOCK_STREAM,0);
    8. if(sfd<0)
    9. {
    10. ERR_MSG("socket");
    11. return -1;
    12. }
    13. printf("socket create success\n");
    14. //允许端口快速复用
    15. int reuse = 1;
    16. if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
    17. {
    18. ERR_MSG("setsockopt");
    19. return -1;
    20. }
    21. printf("允许端口快速复用成功\n");
    22. //填充地址信息结构体给bind函数绑定使用
    23. //真实地址信息结构体根据地质族指定,AF_INET;man 7 ip
    24. struct sockaddr_in sin;
    25. sin.sin_family = AF_INET; //必须填AF_INET;
    26. sin.sin_port = htons(SER_PORT); //端口号网络字节序,1024-49151
    27. sin.sin_addr.s_addr = inet_addr(SER_IP); //本机IP的网络字节序,ifconfig
    28. if(connect(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
    29. {
    30. ERR_MSG("connect");
    31. return -1;
    32. }
    33. printf("connect success\n");
    34. char buf[128]="";
    35. ssize_t res=0;
    36. while(1)
    37. {
    38. bzero(buf,sizeof(buf));
    39. //发送数据
    40. printf("请输入账户 密码>> ");
    41. fgets(buf,sizeof(buf),stdin);
    42. buf[strlen(buf)-1]='\0';
    43. if(send(sfd,buf,sizeof(buf),0)<0)
    44. {
    45. ERR_MSG("send");
    46. return -1;
    47. }
    48. printf("send success\n");
    49. if(strcmp(buf,"quit")==0)
    50. break;
    51. bzero(buf,sizeof(buf));
    52. //接收数据
    53. res=recv(sfd,buf,sizeof(buf),0);
    54. if(res<0)
    55. {
    56. ERR_MSG("recv");
    57. return -1;
    58. }
    59. else if(0==res)
    60. {
    61. printf("[%s:%d] newfd=%d : 服务器下线 __%d__\n",\
    62. SER_IP,SER_PORT,sfd,__LINE__);
    63. break;
    64. }
    65. printf("[%s:%d] newfd=%d : %s __%d__\n",\
    66. SER_IP,SER_PORT,sfd,buf,__LINE__);
    67. }
    68. //关闭套接字
    69. close(sfd);
    70. return 0;
    71. }

  • 相关阅读:
    C++ 学习(五)数组(一维数组、二维数组)
    基于Java的私人牙医诊所(医院)系统
    CAS:474922-26-4,DSPE-PEG-NH2,DSPE-PEG-amine,磷脂-聚乙二醇-氨基供应
    [附源码]java毕业设计汽车销售网站论文
    尝试搭建webgl游戏引擎-起头
    MySQL事务的隔离级别
    网络七层结构(讲人话)
    单/多文本溢出省略
    WebSocket通信安全概览
    (续)SSM整合之spring笔记(IOC 基于注解的自动装配@Autowired)(P091—P093)
  • 原文地址:https://blog.csdn.net/weixin_69186714/article/details/133525908