基于linux下的聊天程序的开发与设计内容摘要:
HP, Guile,Perl, Python, TOM, Ada95, Objective C, Free Pascal, and Eiffel。 本章总结: 技术是开发的基础,只有熟练掌握了这些技术,才能高效、快速的完成所设计的软件。 上面已经总体上列出聊天程序的基本技术,接下来的工作就是利用这 些技术实现所需要的功能。 10 第三章 软件详细设计及代码实现 我们所看到的软件是这个软件的图形界面,这些界面要容易被大众所接受,而实现软件的功能就是代码了。 软件界 面设计: ( 1)服务器端 如图 31 图 31 服务器端 ( 2)登录界面 如图 32 11 图 32 登录界面 ( 3)注册界面 如图 33 图 33 注册界面 ( 4)注册成功 如图 34 图 34 注册成功 ( 5)客户端窗口 如图 35 12 图 35 客户端 ( 6)用户 2 对用户 3 聊天 如图 36 图 36 聊天示意图 ( 7)系统发布消 息 如图 37 13 图 37 系统发布消息 软件主要代码实现: int initial_server (char *ip, int server_listen_port) { int sockfd。 if ((sockfd=socket(AF_INET, SOCK_STREAM,0))0) { printf(服务器不能创建套接字 !\n)。 fflush(stdout)。 return(0)。 } printf(sockfd is %d\n,sockfd)。 bzero((char*)amp。 server_address, sizeof(server_address))。 =AF_INET。 =i_addr(ip)。 =htons(server_listen_port)。 setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, amp。 flag, len)。 if(bind(sockfd,(structsockaddr*)amp。 server_address,sizeof(server_address))0){ printf(服务器不能绑定本地 IP 地址 !\n)。 fflush(stdout)。 return(0)。 } printf(服务器端口号为: %d\n,server_listen_port)。 return(sockfd)。 } void set_address(fd_set *sockset, int sockfd){ int i。 FD_ZERO(sockset)。 FD_SET(sockfd, sockset)。 14 for(i=0。 iMAX_CLIENT。 i++){ if(user_client[i].socketfd!=0){ FD_SET( user_client[i].socketfd,sockset)。 } } } int max(int a, int b) { return a b ? a : b。 } int user_free() { int i=0。 while ((user_client[i].state!=0)amp。 amp。 (iMAX_CLIENT)) i++。 if (i==MAX_CLIENT) return(1)。 return(i)。 } void init_user_client (void){ int i。 for(i=0。 iMAX_CLIENT。 i++){ bzero(user_client[i].id,MAX_NAME)。 bzero(user_client[i].name,MAX_NAME)。 user_client[i].socketfd=0。 user_client[i].state=0。 } } void textviewclear (GtkWidget * text_view)//清空 textview { GtkTextBuffer *buffer。 GtkTextIter start, end。 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view))。 gtk_text_buffer_get_bounds (buffer, amp。 start, amp。 end)。 gtk_text_buffer_delete (buffer, amp。 start, amp。 end)。 } ( 1) treeiew 信号处理函数 gboolean selection_changed(GtkWidget * widget, gpointer data) { GtkTreeIter iter。 GtkTreeModel *model。 char *value,*token。 if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(widget), amp。 model, amp。 iter)) { gtk_tree_model_get(model, amp。 iter, 0, amp。 value, 1)。 show_foot(label1_to,value)。 strcpy(to_man,value)。 if(strcmp(value,飞鸽传书 )==0){ sprintf(to_id,all)。 //点击飞鸽 }else{ token = strtok(value, ( )。 token = strtok(NULL, ))。 //bzero(del_m,MAX_ROW)。 sprintf(to_id,%s,token)。 printf(value=%s,to_id%s\n, value,to_id)。 } /*if (strcmp(value, 在线好友 ) != 0 amp。 amp。 strcmp(value, 离线好友 ) != 0) { strtok(value, )。 strcpy(sid, value + (strlen(value) + 2))。 printf(%s\n, sid)。 //GtkWidget *to_to。 //to_to=create_toto(1)。 15 //gtk_widget_show_all(to_to)。 int i。 for (i = 0。 i MAX_CLIENT。 i++) { if (strcmp(list[i].id, sid) == 0) { printf(i=%d\n, i)。 printf(id=%s\n, list[i].id)。 if (list[i].state == 0) { //g_thread_create(G_THREAD_FUNC(dialog),NULL,FALSE, NULL)。 break。 } else { printf(id=%s\n, list[i].id)。 if (list[i].p == 0) { g_thread_create(G_THREAD_FUNC(func_action), (void*)i, FALSE, NULL)。 } break。 } } } }*/ } } ( 2) 显示好友列表 GtkTreeModel *createmodel() { int unline。 int online。 const gchar *files[] = { , , }。 GtkWidget *cellView。 GdkPixbuf *pixbuf。 GtkTreeIter iter1, iter2。 gint i, j, s, k = 0。 char to_tree[MAX_CLIENT][MAX_NAME],fly[MAX_NAME]。 store = gtk_tree_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING)。 cellView = gtk_cell_view_new()。 sprintf(fly,飞鸽传书 \0)。 pixbuf = gdk_pixbuf_new_from_file(files[1], NULL)。 gtk_tree_store_append(store, amp。 iter1, NULL)。 gtk_tree_store_set(store, amp。 iter1, PIXBUF_COL, pixbuf, TEXT_COL, fly, 1)。 printf(tree_cont=%s\n,fly)。 gdk_pixbuf_unref(pixbuf)。 for (i = 0。 i MAX_CLIENT。 i++) { if(strlen(user_client[i].id)!=0){ //my_friend[i].f_name //my_friend[i].f_id sprintf(to_tree[i],%s( %s ),user_client[i].name,user_client[i].id)。 pixbuf = gdk_pixbuf_new_from_file(files[1], NULL)。 gtk_tree_store_append(store, amp。 iter1, NULL)。 gtk_tree_store_set(store, amp。 iter1, PIXBUF_COL, pixbuf, TEXT_COL, to_tree[i], 1)。 printf(tree_cont=%s\n,to_tree[i])。 gdk_pixbuf_unref(pixbuf)。 } } /*list[messcount] if (i == 0) { for (j = 0。 j MAX_CLIENT。 j++) { if (list[j].state == 1) { 16 bzero(tables, MAX_NAME)。 sprintf(tables, %s%s, list[j].name, list[j].id)。 printf(%s\n, list[j].name)。 s = rand() % 5。 pixbuf = gdk_pixbuf_new_from_file(file[i], NULL)。 //pixbuf=gtk_widget_render_icon(cellView,stocks[s],GTK_ICON_SIZE_BUTTON, NULL)。 gtk_tree_store_append(store, amp。 iter2, amp。 iter1)。 gtk_tree_store_s。基于linux下的聊天程序的开发与设计
相关推荐
3) 完全开放源代码,价格低廉 4) 安全可靠,无后门 Linux 这些特点成为了我们选择 Linux 系统作为防火墙系统理由。 事实上另外 一些开源操作系统也具体相似的特点 (如 FreeBSD, NetBSD, OpenBSD 等 ), 不过个人较熟悉 Linux,所以就选择了它。 3. Linux 中的包过滤框架 . filter/iptables 简介 filter/iptables
答 辩 会 纪 要 时间 20200518 地点 三教 707 答 辩 小 组 成 员 姓 名 职务(职称) 姓 名 职务(职称) 姓 名 职务(职称) 陈泽顺 副教授 刘爱林 副教授 张文昭 高级实验师 徐晓 副教授 周玲 讲师 刘志壮 教授 答辩中提出的主要问题及回答的简要情况记录: , TCP协议与 UDP协议有什么区别。 答:通过准备毕业设计的这段时间搜集的资料,加上自己的理解,总的来说
过程与程序开发 .......................................................................... 6 多线程的概念 ................................................................................................... 9 2
的使用时间中可节省 1000 亿度电。 另外 ,从经济方面来比较 ,用 1 个 3W 白光 LED 灯点了 50000h,总的花费是 209 元 ,若用 25W 白炽灯泡需花费 元 ,相差 元。 3 基于 LED智能节能照明系统的设计 众所周知,煤炭和电力资源 都属于不可再生资源,在我国电力资源构成中,火力发电已占到了 75%左右,水电约为 24%,核力发电仅约占 1%
工业计算机或 PC 机)通过控制软件对电机控制卡进 行读写操作,可向控制卡发送位置、速度、加速度命令。 步进电机控制卡:控制卡根据主机的命令产生脉冲序列,脉冲个数(位 置) 、频率(速度)及频率变化率(加速度)均受主机控制。 步进电机驱动器:步进电机驱动器根据接收到的脉冲信号,产生多拍节 脉冲驱动信号控制步进电机旋转。 9 山东建筑大学 网络教育学院毕业论文 2. 3 开环运动控制系统 X
r ly f eel t he pulse of t he XX power gener ation pany t o f lourish, t o m or e clearly hear XX power gener ation panies m at ur e and sym met ry br eathing. Recalling past one anot her acr oss a r