1、面向图书管理系统 TCP协议 LINUX平台成都信息工程学院课程设计报告面向连接的图书信息查询系统课程名称: 高级程序设计语言B 学生姓名: 学生学号: 专业班级: 任课教师: 附件:成绩评价表成绩评定表程序编译和功能演示(30%)编程代码质量(10%)编程水平与程序设计能力(30%)程序设计说明书(论文)撰写质量(30%)总分目 录1. 程序设计 32. 程序功能模块详细设计(源代码+程序说明) 33. 程序功能演示和测试结果 4结论 41. 程序设计1.1程序设计目标根据套接字编程知识,采用面向连接TCP协议,实现服务器端存储图书基本信息,用户可通过客户端输入书名或者出版社,或者价格或者出
2、版时间,查询到书的基本情况。1)客户端可以连接服务器端,服务器端显示连接客户端连接信息(即客户端IP地址),客户端显示连接成功或者失败信息;2)客户端输入书名,然后发送给服务器,服务器则查询是否有该书,若有则服务器把该书的基本信息(包括书名,出版社,出版时间,价格)相关信息返回给客户端,客户端收到,则显示出来3)客户端输入出版社,然后发送给服务器,服务器则查询是否符合出版社条件的书籍,若有则服务器把找到符合出版社名称书的基本信息全部发送给客户端(包括书名,出版社,出版时间,价格)相关信息返回给客户端,客户端收到,则显示出来4)与第3不类似,输入价格或者出版时间,则服务器端把符合此价格或者出版时
3、间的书结果返回客户端,则显示出来;5)在客户端输入“quit”,服务器端终止该客户端连接,客户端程序结束。1.2 程序运行环境*linux 操作系统 编译工具: gcc1.3 程序功能模块设计*2. 程序功能模块详细设计(源代码+程序说明)2.1服务器端*#include #include#include#include#include#include#include#include#include #define PORT 6666#define BUFFERSIZE 1024 struct BOOK char MING30; char chuban30; char cash30; char
4、 time30; stu11=name:C,from:Qinghua colleg,cost:11,time:2012.1.3,name:DIAN,from:Bei Jin,cost:35,time:2003,2,3,name:SHUZHI,from:CUIT,cost:99,time:2008.1.2,name:AAA,from:NB,cost:23,time:1999.2.3,name:BBB,from:NIKE,cost:1,time:0034.2.3,name:DDD,from:WWW,cost:12,time:2012.3.4,name:FFF,from:EWF,cost:39,ti
5、me:2006.3.4,name:SSS,from:ASD,cost:33,time:2004.3.4,name:QQQ,from:MM,cost:33,time:2013.2.4,name:Q1989,from:FG,cost:12,time:1999.9.3,name:ZZZ,from:WWW,cost:11,time:2999.3.5;int main() int sockfd,newfd ; struct sockaddr_in my_addr; struct sockaddr_in their_addr; unsigned int sin_size,listnum; listnum=
6、0; if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) printf(socket errorn); exit(-1); bzero(&my_addr, sizeof(my_addr); my_addr.sin_family=AF_INET; my_addr.sin_port=htons(PORT); my_addr.sin_addr.s_addr= htonl(INADDR_ANY); /bzero(&my_addr.sin_zero,0); if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct
7、sockaddr)=-1) printf(bind errorn); exit(-1); if(listen(sockfd,listnum)=-1) printf(listen errorn); exit(-1); sin_size=sizeof(struct sockaddr_in);while(1) if(newfd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)=-1) printf(accept errorn); exit(-1); printf(link starn); send(newfd,welcome to my s
8、ervern,22, 0); / printf(you get a connection from %sn, inet_ntoa(their_addr.sin_addr); char sock_bufBUFFERSIZE; bzero(sock_buf,BUFFERSIZE); int rval; if(rval=recv(newfd,sock_buf,BUFFERSIZE,0)= -1) printf(Recv errorn); exit(-1); else if (!strcmp(sock_buf,quit) break; send(newfd,break!,BUFFERSIZE,0);
9、else /printf(find: %sn,sock_buf); int i=0; for(i=0;i11) send(newfd,cant findn,BUFFERSIZE,0); printf(cant findn); break; close(newfd); close(sockfd); 2.2客户端*#include #include#include#include#include#include#include#include#include #define PORT 6666/#define DEF_IP 127.0.0.1int main(int argc, char *arg
10、v) int sockfd,zzm; char buffer1024; struct sockaddr_in server_addr; struct hostent *host; int portnumber,nbytes; if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) printf(socket ERRORn); exit(1); if (argc != 2) printf(Usage: %s n, argv0); exit(-1); if (host = gethostbyname(argv1) = NULL) perror(gethostbyna
11、me error.); exit(1); if (sockfd = socket(AF_INET, SOCK_STREAM, 0) = -1) perror(Create socket failed.); exit(1); bzero(&server_addr,sizeof(server_addr); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(PORT);/server_addr.sin_addr.s_addr=inet_addr(DEF_IP); server_addr.sin_addr = *(struct in_
12、addr*) host-h_addr); if(connect(sockfd,(struct sockaddr*)&server_addr,sizeof(struct sockaddr)=-1) printf(connect 澶辫触n); exit(1); if( (zzm = recv(sockfd, buffer, 1024, 0) = -1) perror(recv error.); exit(1); printf(Server Message: %sn,buffer);while(1) printf(find:n); scanf(%s,buffer); send(sockfd,buff
13、er,1024,0); int rval=0; memset(buffer,0,sizeof(buffer); if(rval=recv(sockfd,buffer,1024,0)0) printf(Recv errorn); exit(1); else char *pbuf=buffer; printf(The end: %sn,pbuf); pbuf+=30; printf(%sn,pbuf); pbuf+=30; printf(%sn,pbuf); pbuf+=30; printf(%sn,pbuf); break; 3. 程序功能演示和测试结果*结论*本程序实现了设计的所以要求,运行流畅功能正常。完成了本次程序设计的要求。