服务器server.c、搜索serach.c
server.c代码:
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>static int callback2(void *NotUsed, int argc, char **argv, char **azColName)
{ int i=0,k=0; record_num=argc;for(i=0; i<argc; i++){strcpy(s_callback2[i],argv[i] ? argv[i] : "NULL");} printf("\n");return 0;
}
int record_num=0;
int main(
{int server_sockfd;//服务器端套接字 int client_sockfd;//客户端套接字 int len; struct sockaddr_in my_addr; //服务器网络地址结构体 struct sockaddr_in remote_addr; //客户端网络地址结构体 int sin_size; char buf[BUFSIZ]; //数据传送的缓冲区 memset(&my_addr,0,sizeof(my_addr)); //数据初始化--清零 my_addr.sin_family=AF_INET; //设置为IP通信 my_addr.sin_addr.s_addr=INADDR_ANY;//服务器IP地址--允许连接到所有本地地址上 my_addr.sin_port=htons(8000); //服务器端口号 /*创建服务器端套接字--IPv4协议,面向连接通信,TCP协议*/ if((server_sockfd=socket(PF_INET,SOCK_STREAM,0))<0) { perror("socket"); return 1; } /*将套接字绑定到服务器的网络地址上*/ if (bind(server_sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))<0) { perror("bind"); return 1; } /*监听连接请求--监听队列长度为5*/ listen(server_sockfd,5); sin_size=sizeof(struct sockaddr_in); /*等待客户端连接请求到达*/ if((client_sockfd=accept(server_sockfd,(struct sockaddr *)&remote_addr,&sin_size))<0) { perror("accept"); return 1; } printf("accept client %s/n",inet_ntoa(remote_addr.sin_addr)); len=send(client_sockfd,"Welcome to my server/n",21,0);//发送欢迎信息 /*接收客户端的数据并将其发送给客户端--recv返回接收到的字节数,send返回发送的字节数*/ while((len=recv(client_sockfd,buf,BUFSIZ,0))>0)) {buf[len]='/0'; printf("%s/n",buf); /*if(send(client_sockfd,buf,len,0)<0) { perror("write"); return 1; }*/char s_callback2[100][1024];memset(s_callback2,' ',sizeof(s_callback2));char *ErrMsg = 0;int ret = 0;int i=0;sqlite3 *db = 0;ret = sqlite3_open("mail.db",&db);if(ret != SQLITE_OK){fprintf(stderr,"Cannot open db: %s\n",sqlite3_errmsg(db));return 1;}char sql[1024];memset(sql,0,sizeof(sql));char sender[13];memset(sender,0,sizeof(sender));char recer[13];memset(recer,0,sizeof(recer));char date_time[27];memset(date_time,0,sizeof(date_time));char title[81];memset(title,0,sizeof(title));char usrname[13];memset(usrname,0,sizeof(usrname));//char contactor[13];//memset(contactor,0,sizeof(contactor));switch(buf[0]){case '2':{if(buf[1]=='1'){//向客户端发送"已发送"内容memset(sender,0,sizeof(sender));memcpy(sender,buf+3,(int)buf[2]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2));sprintf(sql,"SELECT title,date_time FROM send WHERE sender='%s'AND status_sender=2 OR status_sender=5 OR status_sender=8;",sender);col_num=2;sqlite3_exec(db,sql,callback2,0,&ErrMsg);for(i=0;i<record_num;i++){if(send(client_sockfd,s_callback2[i],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[%d] success\n",i);}}record_num=0;}if(buf[1]=='2'){//向客户端发送一封邮件的具体内容memset(sender,0,sizeof(sender));memcpy(sender,buf+3,(int)buf[2]);memset(date_time,0,sizeof(date_time));memcpy(date_time,buf+15,(int)buf[14]);memset(recer,0,sizeof(recer));memcpy(recer,buf+42,(int)buf[41]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2));sprintf(sql,"SELECT content FROM send WHERE date_time='%s' AND sender IN (SELECT sender FROM receive WHERE sender='%s' AND date_time='%s' AND recer='%s');",date_time,sender,date_time,recer);colnum=1;sqlite3_exec(db,sql,callback2,0,&ErrMsg);if(send(client_sockfd,s_callback2[0],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[0] success\n");}record_num=0; }if(buf[1]=='3'){//向客户端发送一封草稿的内容,若有收信人写在content内memset(sender,0,sizeof(sender));memcpy(sender,buf+3,(int)buf[2]);memset(date_time,0,sizeof(date_time));memcpy(date_time,buf+15,(int)buf[14]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2));sprintf(sql,"SELECT content FROM send WHERE sender='%s' AND date_time='%s';",sender,date_time);colnum=1;sqlite3_exec(db,sql,callback2,0,&ErrMsg);if(send(client_sockfd,s_callback2[0],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[0] success\n");}record_num=0; }break; }case '3':{if(buf[1]=='0'){//向客户端发收信箱内容memset(rec,0,sizeof(recer));memcpy(recer,buf+3,(int)buf[2]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2)); sprintf(sql,"SELECT s.sender,s.title,s.date_time FROM send s,receive r WHERE s.sender=r.sender AND s.date_time=r.date_time AND recer='%d' AND status_recer=3;",recer);sqlite3_exec(db,sql,callback2,0,&ErrMsg);for(i=0;i<record_num;i++){if(send(client_sockfd,s_callback2[i],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[%d] success\n",i);}}record_num=0;}if(buf[1]=='1'){//向客户端发收件箱内容memset(rec,0,sizeof(recer));memcpy(recer,buf+3,(int)buf[2]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2)); sprintf(sql,"SELECT s.sender,s.title,s.date_time FROM send s,receive r WHERE s.sender=r.sender AND s.date_time=r.date_time AND recer='%d' AND status_recer=3 OR status_recer=6;",recer);sqlite3_exec(db,sql,callback2,0,&ErrMsg);for(i=0;i<record_num;i++){if(send(client_sockfd,s_callback2[i],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[%d] success\n",i);}}record_num=0;}if(buf[1]=='2'){//向客户端发已删除箱内容memset(rec,0,sizeof(recer));memcpy(recer,buf+3,(int)buf[2]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2)); sprintf(sql,"SELECT s.sender,s.title,s.date_time FROM send s,receive r WHERE s.sender=r.sender AND s.date_time=r.date_time AND recer='%d' AND status_recer=4 OR status_recer=7;",recer);sqlite3_exec(db,sql,callback2,0,&ErrMsg);for(i=0;i<record_num;i++){if(send(client_sockfd,s_callback2[i],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[%d] success\n",i);}}record_num=0;}break; }case '4':{if(buf[1]=='0'){memset(usrname,0,sizeof(usrname));memcpy(usrname,buf[3],(int)buf[2]);memset(sql,0,sizeof(sql));memset(s_callback2,0,sizeof(s_callback2));sprintf(sql,"SELECT contactor FROM contact WHERE uarname='%s';",usrname);sqlite3_exec(db,sql,callback2,0,&ErrMsg);for(i=0;i<record_num;i++){if(send(client_sockfd,s_callback2[i],len,0)<0) { perror("write"); return 1; }else{printf("send s_callback2[%d] success\n",i);}}record_num=0;}break;}} }close(client_sockfd); close(server_sockfd); return 0;
}
serach.c代码:
int res_title[81];
int res_content[501];
void search(char* key,char *title,char* content)
{int i=0,j=0,k=0,t=0,c=0;int len_k,len_t,len_c;len_k=strlen(key);len_t=strlen(title);len_c=strlen(content);for(i=0;i<len_k;i++){for(j=0;j<len_t;j++){if(key[i]==title[j]){res_title[t]=j;}}for(k=0;k<len_c;k++){if(key[i]==content[k]){res_content[c]=k;}}}
}
server make:
OBJS = server.o
TARGET = server
CFLAG = -g -Wall -O2 -lsqlite3all: $(TARGET)$(TARGET): $(OBJS)$(CC) $(CFLAG) -o $(TARGET) $(OBJS)%.o:%.c$(CC) $(CFLAG) -o $@ -c $?clean:rm -rf $(OBJS) $(TARGET)
gtk make:
#Makefile for zhuce.c
all:gcc -o zhuce zhuce.c `pkg-config --cflags --libs gtk+-2.0`
服务器server.c、搜索serach.c相关推荐
- 使用SharePoint Server 2007搜索对象模型编程创建搜索查询
MOSS Visual How To 使用SharePoint Server 2007搜索对象模型编程创建搜索查询 摘要:学习如何使用Microsoft Office SharePoint Serve ...
- 服务器server.cfg文件详解,配合L4D使用
服务器server.cfg文件详解,配合L6D使用,未知或错误参数说明希望XD补全和修正 该设置文件针对用srcds.exe开服务器并使用LXD插件的情况,用MAP方式开图会无效 文件内容如下: // ...
- 饥荒 搜不到指定服务器,运行饥荒就直连特定服务器,无需搜索房间名方法图文教程...
简介 运行饥荒的时候自动进入某个服务器,无需其他操作.可能很多朋友都在找到底应该怎么操作,下面就给大家分享一下. 作用 1,有时候搜索不出房间名字,这样可以直接进入特定服务器. 2,如果是专门玩一个服 ...
- 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )
文章目录 一.服务器端完整代码 Server.groovy 二.客户端完整代码 Client.groovy 三.运行服务器端与客户端效果及过程分析 一.服务器端完整代码 Server.groovy 参 ...
- Tomcat 服务器server.xml,web.xml的关键参数配置
Tomcat 服务器server.xml的关键参数配置 说明:以下文字均以tomcat5.0.30为例进行. 1,配置tomcat服务器访问端口,只需配置Connector的port端口即可.Tomc ...
- sql server的搜索_在SQL Server中进行全文本搜索
sql server的搜索 介绍 (Introduction) In most cases, we will use clustered and non-clustered indexes to he ...
- SQL FILESTREAM和SQL Server全文搜索
In this article, the latest in our series on the SQL FILESTREAM feature, we are going to look at the ...
- 服务器文件夹搜索不到,如何将文件夹添加到VSO 2015构建服务器中的搜索路径
我遇到了我尝试设置的构建服务器的问题. 我们使用telerik,并安装了带有telerik控制面板的库.构建过程搜索DLL的所有错误的地方.如何将文件夹添加到VSO 2015构建服务器中的搜索路径 不 ...
- SQL Server全文搜索
看这篇文章之前请先看一下下面我摘抄的全文搜索的MSDN资料,基本上MSDN上关于全文搜索的资料的我都copy下来了 并且非常认真地阅读和试验了一次,并且补充了一些SQL语句,这篇文章本人抽取了一些本人 ...
- BitTorrent网络中基于Kademlia协议到DHT无服务器泛互联网搜索软件推荐
本文转自 http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1515544 标题有点长,可能大家不理解什么意思,偶就慢慢地介绍一下, 首先, ...
最新文章
- HTML5与CSS3权威指南之CSS3学习记录
- Python+PyQt 数据库基本操作
- 001.Amoeba读写分离部署
- 启明云端分享|一款方便、实用的且适用于ESP32/ESP8266的USB-TTL转接板开发工具推荐
- spring中bean的两种注入方式
- Silverlight专题(15) - 你自己的视频播放器之自定义MoveToPointSlider
- 前端基础:JavaScript 代码风格指南
- pycharm和jupyter notebook中的快捷键
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- 记一次微信APP支付开发返回-1的坑
- 弹幕调试 jquery.danmu.js
- H5-ffmpeg.js压缩视频
- LeetCode-完成旅途的最少时间
- 洛谷 10月 csp-s 模拟赛 T1,T2解析及代码
- 【Industry digitization】能源供应商的数字化转型,能源世界正在发生不可逆转的深刻变革
- 每日日报20191223
- python中出现IndentationError:unindent does not match any outer indentation level是什么问题?
- 银河麒麟V10.1 使用root用户时自动重启pulseaudio服务
- mysql关于in子查询索引
- (20200322已解决)sudo: unable to resolve host iZj6cevtfmqday01Z
热门文章
- Gd-DTPA钆元素钆元素对比磁共振造影剂 氟-19磁共振/荧光双模态显影剂19F MRI
- IDEA使用教程之创建一个工程(一)
- 求证:拉皮手术费多少钱,拉皮手术后会有哪些后遗症,原来如此
- 智能柜子锁方案开发,蓝牙智能防盗。
- 文件或目录损坏且无法读取怎么办?数据恢复用这招
- PR 音频去噪、音频信号增强、音频导出wav文件;
- 苹果雪豹操作系统正式版_苹果放出iOS 13andiPadOS beta 2:加入SMB网络共享、APFS硬盘支持...
- easyx——c语言实时动画时钟
- MSP430G2553学习笔记
- < 知识拓展:CSS 中常用的计量单位有哪些? >