#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<pthread.h>
#include<sys/wait.h>
#include<sys/socket.h>
#include<sys/select.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sqlite3.h>
#include<fcntl.h>
#include<sys/stat.h>
#define PORT 8081
#define BUFFSIZE 32
#define BUFFSIZE_LINE 128
// char *ip="192.168.108.210";
char *ip="192.168.1.11";
typedef struct{
int client_socket;
struct sockaddr_in client_addr;
}client_info_t;
void print_sockaddr(struct sockaddr_in addr){
printf("[%s:%d]:\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
}
void client_exit(struct sockaddr_in client_addr){
print_sockaddr(client_addr);
}
void* handle_pthread(void *arg){
client_info_t* client_info=(client_info_t*)arg;
int client_socket=client_info->client_socket;
struct sockaddr_in client_addr=client_info->client_addr;
char send_buf[BUFFSIZE],recv_buf[BUFFSIZE];
while(1){
memset(send_buf,0,sizeof(send_buf));
memset(recv_buf,0,sizeof(recv_buf));
int val_recv=recv(client_socket,recv_buf,BUFFSIZE,0);
if(val_recv==0){
close(client_socket);
client_exit(client_addr);
pthread_exit(NULL);
}
print_sockaddr(client_addr);
recv_buf[BUFFSIZE-1]='\0';
printf("recv_buf=%s\n",recv_buf);
sprintf(send_buf,"hello server has recv %d\n",client_socket);
send_buf[strlen(send_buf)-1]='\0';
send(client_socket,send_buf,sizeof(send_buf),0);
printf("[send to %d]:%s\n",client_socket,send_buf);
}
}
void print_err(char *arg){
perror(arg);
fprintf(stderr,"errno:%s\n",strerror(errno));
}
void print_db_err(char *arg,sqlite3 *ppDb){
perror(arg);
fprintf(stderr,"errno:errcode=%d,errmsg=%s\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb));
}
int handle_callback(void *data,int argc,char **argv,char **azColName){
return 0;
}
int main(int argc, char const *argv[])
{
/* code */
char *errmsg=NULL;
sqlite3 *ppDb_dict=NULL,*ppDb_user=NULL;
if(sqlite3_open("./dict.db",&ppDb_dict)!=SQLITE_OK){
print_db_err("sqlite3_open ./dict.db err\n",ppDb_dict);
return -1;
}
char *sql_dict="create table if not exists dict(word char,mean char);";
if(sqlite3_exec(ppDb_dict,sql_dict,NULL,NULL,&errmsg)!=SQLITE_OK){
print_db_err("sqlite3_exec sql_dict err\n",ppDb_dict);
sqlite3_free(errmsg);
errmsg=NULL;
return -1;
}
printf("sqlite3_exec sql_dict sucessful\n");
FILE *fp=fopen("/home/ubuntu/Project/Socket/demo1/dict.txt","rb");
if(fp==NULL){
perror("open fail err\n");
return -1;
}
char line[BUFFSIZE_LINE],word[BUFFSIZE],mean[BUFFSIZE*2],sql_line[BUFFSIZE*4]={0};
while(fgets(line,sizeof(line),fp)!=NULL){
// static int cnt=0;
// cnt++;
// if(cnt>5) break;
line[strcspn(line,"\n")]=0;
char *token=strtok(line," ");
strcpy(word,token);
token=strtok(NULL," ");
strcpy(mean,token);
sprintf(sql_line,"insert into dict values(\"%s\",\"%s\");",word,mean);
if(sqlite3_exec(ppDb_dict,sql_line,NULL,NULL,&errmsg)){
print_db_err("insert into dict err\n",ppDb_dict);
}
printf("%s %s\n",word,mean);
memset(mean,0,sizeof(mean));
memset(word,0,sizeof(word));
memset(line,0,sizeof(line));
}
if(feof(fp)) printf("已到达文件结尾\n");
else if(ferror(fp)) perror("读取错误\n");
if(sqlite3_open("./user.db",&ppDb_user)!=SQLITE_OK){
print_db_err("sqlite3_open ./user.db err",ppDb_user);
return -1;
}
char *sql_user="create table if not exists history(name char, word char, mean char, stage int);"
"create table if not exists usr(name char primary key, passwd char, state int);";
if(sqlite3_exec(ppDb_user,sql_user,NULL,NULL,&errmsg)!=SQLITE_OK){
print_db_err("sqlite3_exec sql_user err\n",ppDb_user);
sqlite3_free(errmsg);
errmsg=NULL;
return -1;
}
printf("sqlite3_exec sql_user sucessful\n");
int server_socket,client_socket;
struct sockaddr_in server_addr,client_addr;
socklen_t server_len=sizeof(server_addr),client_len=sizeof(client_addr);
if((server_socket=socket(AF_INET,SOCK_STREAM,0))==-1){
print_err("socket err");
exit(EXIT_FAILURE);
}
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
server_addr.sin_addr.s_addr=inet_addr(ip);
int opt=1;
if(setsockopt(server_socket,SOCK_STREAM,SO_REUSEADDR,&opt,sizeof(opt))==-1){
print_err("setsockopt err");
exit(EXIT_FAILURE);
}
if(bind(server_socket,(struct sockaddr *)&server_addr,server_len)==-1){
print_err("bind server_socket");
exit(EXIT_FAILURE);
}
if(listen(server_socket,128)==-1){
print_err("listen err");
exit(EXIT_FAILURE);
}
printf("listening .... \n");
while(1){
client_socket=accept(server_socket,(struct sockaddr *)&client_addr,&client_len);
if(client_socket==-1){
print_err("accept err");
sleep(2);
continue;
}
printf("[%s:%d] is Connected...\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
client_info_t client_info;
client_info.client_socket=client_socket;
client_info.client_addr=client_addr;
pthread_t tid=-1;
if((pthread_create(&tid,NULL,handle_pthread,&client_info))==-1){
print_err("pthread_create");
sleep(2);
continue;
}
pthread_detach(tid);
}
close(server_socket);
return 0;
}
【无标题】
最新推荐文章于 2025-12-08 09:18:56 发布
8791

被折叠的 条评论
为什么被折叠?



