这是我的分布式计算环境作业,用到的GTK,Mysql,socket都是第一次使用,边学边用,大概用了十天的时间编写完的,大部分时间还是上课...
程序还有N多Bug,没时间调了,姑且就先这样,反正作业要求的都实现了,...*^_^*…
中间还有几个比较笨的地方,比如客户端对从服务器接收来的信息进行分析拆解时,我只是假设最多只有两条记录,当然这是不可能的,但3条以上的记录时,通过罗列sscan()中的格式串也能实现,不过觉得肯定不能这样实现,太原始了,现在只是有个初始的改进想法,时间不多了,就先放着了...
操作系统使用的是Ubuntu8.04...
程序还有N多Bug,没时间调了,姑且就先这样,反正作业要求的都实现了,...*^_^*…
中间还有几个比较笨的地方,比如客户端对从服务器接收来的信息进行分析拆解时,我只是假设最多只有两条记录,当然这是不可能的,但3条以上的记录时,通过罗列sscan()中的格式串也能实现,不过觉得肯定不能这样实现,太原始了,现在只是有个初始的改进想法,时间不多了,就先放着了...
操作系统使用的是Ubuntu8.04...
- /*简易图书馆查询系统客户端*/
- /*编译命令 gcc -o lib_app lib_app.c `pkg-config --libs --cflags gtk+-2.0`*/
- #include<gtk/gtk.h>
- #include<sys/types.h>
- #include<sys/socket.h>
- #include<netinet/in.h>
- #include<arpa/inet.h>
- #include<netdb.h>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<arpa/inet.h>
- #define DEF_PORT 5188 /*默认的连接端口号*/
- #define MAXSIZE 2000 /*默认每次传输的最大字节数*/
- extern int errno;
- enum { LIST_ITEM=0,N_COLUMNS};
- GtkWidget *input_text; /*用户查询输入框*/
- GtkWidget *list; /*显示查询结果列表框*/
- int list_is_click=0; /*判断list是否被选择*/
- char book_name[5][40];
- char author[5][40];
- char public_addr[5][40];
- char public_time[5][40];
- char abstract[5][500];
- char catalog[5][1000];
- void on_list_changed();
- char *selected_book_name; //返回类表框中用户选择的书籍名称
- int book_display_flag; //判断要显示那本书的详细信息
- /*initializing the list widget*/
- static void init_list(GtkWidget *list)
- {
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- renderer=gtk_cell_renderer_text_new();
- column=gtk_tree_view_column_new_with_attributes("List Items",renderer,"text",LIST_ITEM,NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(list),column);
- store=gtk_list_store_new(N_COLUMNS,G_TYPE_STRING);
- gtk_tree_view_set_model(GTK_TREE_VIEW(list),GTK_TREE_MODEL(store));
- g_object_unref(store);
- }
- /*add item to the list */
- static void add_to_list(GtkWidget *list,const gchar *str)
- {
- GtkListStore *store;
- GtkTreeIter iter;
- store=GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list)));
- gtk_list_store_append(store,&iter);
- gtk_list_store_set(store,&iter,LIST_ITEM,str,-1);
- }
- /*清除列表框中的项目*/
- static void remove_all(GtkWidget *widget, gpointer selection)
- {
- GtkListStore *store;
- GtkTreeModel *model;
- GtkTreeIter iter;
- store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (list)));
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (list));
- if (gtk_tree_model_get_iter_first(model, &iter) == FALSE)
- return;
- gtk_list_store_clear(store);
- }
- /*用户单击OK按钮时显示选取的书籍名称*/
- void show_info(GtkWidget *widget,gpointer window)
- {
- GtkWidget *dialog;
- dialog=gtk_message_dialog_new(window, GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,selected_book_name,"title");
- gtk_window_set_title(GTK_WINDOW(dialog),"返回信息");
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
- }
- void help_info(GtkWidget *widget,gpointer window)
- {
- GtkWidget *dialog;
- char help_info[100]="本简易图书馆查询系统中共有5本书:排队论,/nc程序设计教程,C语言程序设计入门,英语听说教程,Ubuntu Linux 入门到精通/n";
- dialog=gtk_message_dialog_new(window, GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,help_info,"title");
- gtk_window_set_title(GTK_WINDOW(dialog),"帮助信息");
- gtk_dialog_run(GTK_DIALOG(dialog));
- gtk_widget_destroy(dialog);
- }
- /*帮助信息*/
- /*改变窗口图标*/
- GdkPixbuf *create_icon(const gchar *icon_name)
- {
- GdkPixbuf *icon;
- GError *error=NULL;
- icon=gdk_pixbuf_new_from_file(icon_name,&error);
- if(!icon)
- {
- fprintf(stderr,"%s/n",error->message);
- g_error_free(error);
- }
- return icon;
- }
- /*当用户点击查询按钮后将开始与服务器端进行连接*/
- void button_search_click()
- {
- struct hostent *ptrhost; /*指向主机列表中的一个条目的指针*/
- struct sockaddr_in server_addr; /*存档服务器端网络地址的结构 */
- int socket_describe; /*客户端套接字描述符*/
- int port; /*服务器端套接字协议端口号*/
- int receive_num; /*客户端接收到的字节数*/
- char *host="localhost"; /*服务器主机名