ImageVerifierCode 换一换
格式:DOCX , 页数:50 ,大小:159.09KB ,
资源ID:9339053      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9339053.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux课程设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

linux课程设计.docx

1、linux课程设计Linux操作系统与程序设计课程设计报告书 * 小组成员:胡海强 软件工程 099074146张文敬 软件工程 099074169孙玲 软件工程 099074155 纵清华 软件工程 099074174 摘 要 随着嵌入式在生活年中的应用越来越广泛,嵌入式Linux下的socket网络编程也越来越热门。为了加强对LINUX系统下的编程的各种知识点的整合与灵活运用,让我们更加熟悉Linux下的编程操作,我们的课程设计的题目为Linux下网络聊天工具。 本系统主要功能是用GTK实现UDP通信。同时使用文件将用户的相关信息保存。应用Linux下的socket网络编程并使用UDP实现

2、简单聊天程序。编程中不断用各种网络调试工具进行调试程序,最终做成了简单的在Linux下的聊天工具。 关键词 :Linux下的socket 网络编程 UDP 聊天工具第一章 绪 论1.1实验项目目的 本次课程设计是为了加强对Linux系统下的编程的各种知识点的整合与灵活运用,让我们更加熟悉Linux下的编程操作。重点在Linux下的socket编程,了解TCP,UDP等协议的使用,并完成课程设计题目。1.2 课程设计的实验环境硬件:基于linux系统的PC机软件:open suse系统 emacs编译器1.3 课程设计总体要求 在Lniux下用GTK实现网络聊天的功能。第二章 系统方案本实验是一

3、个Linux下的网络即时通信工具,系统功能与模块划分如下2.1系统功能本系统的功能主要是在linux平台下用GTK实现网络聊天的功能。2.1 功能模块图 客户端服务器第三章 实验项目的人员组成及职责划分我们实验组总共由2个同学组成,姓名,专业,学号及职责划分如下: 胡海强(专业及班级:软件工程091班,学号099074146),小组组长,负责代码编写、测试及课程设计报告书编写。 张文敬(专业班级:软件工程091班,学号:099074169),负责部分代码的编写,测试及课程设计报告书编写。 孙玲(专业及班级:软件工程091班,学号099074155),负责测试及课程设计报告书编写。 纵清华(专业

4、班级:软件工程091班,学号:099074174),负责测试及课程设计报告书编写。 第四章 设计与实现41 系统结构411 系统结构图42 客户端421 登录模块登录模块截图登录模块代码:void load() GtkWidget *window; GtkWidget *table; GtkWidget *entry; use_r user; GtkWidget *login; GtkWidget *regist; window=gtk_dialog_new();/在内存中创建一个新的对话框 log_dialog=window;/在销毁时使用 gtk_window_set_title(GtkW

5、indow *)window,登录.); gtk_window_set_default_size(GTK_WINDOW(window),200,100);/宽和高 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);/设置刚开始的位置是在屏幕中央 /创建一个表格,再包含进对话框中 table=gtk_table_new(3,3,TRUE);/6行6列 gtk_container_add(GTK_BOX(GTK_DIALOG(window)-action_area),table); /创建一个标签 entry=gtk_la

6、bel_new(用户名:); gtk_table_attach(GTK_TABLE(table),entry,0,1,0,1,GTK_FILL,GTK_FILL,0,0);/ entry=gtk_label_new(密码:); gtk_table_attach(GTK_TABLE(table),entry,0,1,1,2,GTK_FILL,GTK_FILL,0,0);/创建一个文本区 user.userName=gtk_entry_new_with_max_length(20);/限制用户名输入的字符,不能超过20个字节 gtk_table_attach(GTK_TABLE(table),us

7、er.userName,1,3,0,1,GTK_FILL,GTK_FILL,0,0);/ user.passwd=gtk_entry_new_with_max_length(10);/限制密码最多不能超过10个字节 gtk_entry_set_visibility(GTK_ENTRY(user.passwd),FALSE);/在显示字符的地方用不可见字符代替 gtk_table_attach(GTK_TABLE(table),user.passwd,1,3,1,2,GTK_FILL,GTK_FILL,0,0);/ login=gtk_button_new_with_label(登录); gtk

8、_table_attach(GTK_TABLE(table),login,2,3,2,3,GTK_FILL,GTK_FILL,0,0);/ regist=gtk_button_new_with_label(注册); gtk_table_attach(GTK_TABLE(table),regist,0,1,2,3,GTK_FILL,GTK_FILL,0,0);/ /前面将登录的界面构建成功 /将真正的功能赋予这些按钮,即连接回调函数,通过信号传递 g_signal_connect(G_OBJECT(login),clicked,G_CALLBACK(log_hwQQ),&user); g_sig

9、nal_connect(G_OBJECT(regist),clicked,G_CALLBACK(reg_hwQQ),NULL); g_signal_connect(G_OBJECT(window),destroy,G_CALLBACK(quit),NULL); gtk_widget_show_all(window); gtk_main();/把控制权交给GTK+来启动交互过程,并且一直运行,直到调用gtk_main_quit()才返回void log_hwQQ(GtkWidget *login,use_r *user)/点击登录时,产生的动作 /需要先设置登录状态,此时还没有登录成功,所以为0

10、 logSta=0; if(strcmp(gtk_entry_get_text(GTK_ENTRY(user-userName),)=0| strcmp(gtk_entry_get_text(GTK_ENTRY(user-passwd),)=0) g_print(用户名或密码不能为空,请重新登录!n);/终端输出 return; /设置好 信息的相关内容,再进行发送 message Mess; strcpy(Mess.gusName,gtk_entry_get_text(GTK_ENTRY(user-userName); strcpy(Mess.pawd,gtk_entry_get_text(

11、GTK_ENTRY(user-passwd); strcpy(useName,Mess.gusName); strcpy(pawd,Mess.pawd);/printf(yonghu%s,useName);/printf(mima%s,pawd); Mess.flags=2;/代表登录 /发送 write(sockfd,(char *)&Mess,sizeof(message); while(1) if(logSta!=0)/如果状态不是登录成功的状态,就一直等待,死循环 break; if(logSta=1)/登录成功,需要将该登录界面销毁,同时打开hw_QQ界面 gtk_widget_de

12、stroy(GTK_WIDGET(log_dialog); g_print(/*恭喜您,已经登录成功!(客户端)*/n); /进入hw_QQ界面,可通过选择好友来聊天,但还不是聊天的界面 chatmain_dialog(); 422 注册模块注册模块截图注册模块代码void reg_handle(GtkWidget *resButton,r_user *p_re_user) if(strcmp(gtk_entry_get_text(GTK_ENTRY(p_re_user-userName),)=0| strcmp(gtk_entry_get_text(GTK_ENTRY(p_re_user-p

13、asswd),)=0| strcmp(gtk_entry_get_text(GTK_ENTRY(p_re_user-agaPasswd),)=0) g_print(用户名,密码或确认密码不能为空,请重新输入!n); return; if(strcmp(gtk_entry_get_text(GTK_ENTRY(p_re_user-passwd),gtk_entry_get_text(GTK_ENTRY(p_re_user-agaPasswd)!=0) g_print(密码和确认密码不一致,请重新输入!n); return; /要传送的消息构造 message resMess; strcpy(re

14、sMess.gusName,gtk_entry_get_text(GTK_ENTRY(p_re_user-userName); strcpy(resMess.pawd,gtk_entry_get_text(GTK_ENTRY(p_re_user-passwd); resMess.flags=1;/代表注册消息 /可以传送该消息了,将注册消息传送至服务器端 write(sockfd,(char *)&resMess,sizeof(message); gtk_widget_destroy(GTK_WIDGET(reg_dialog); g_print(/*恭喜你,注册成功!(客户端)*/n); /

15、类似于登录的界面void reg_hwQQ(GtkWidget *login,use_r *user) GtkWidget *window; GtkWidget *table; GtkWidget *entry; r_user re_user; GtkWidget *resButton; window=gtk_dialog_new(); reg_dialog=window; gtk_window_set_title(GtkWindow *)window,注册.); gtk_window_set_default_size(GTK_WINDOW(window),250,130); gtk_wind

16、ow_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); table=gtk_table_new(4,3,TRUE);/ gtk_container_add(GTK_BOX(GTK_DIALOG(window)-action_area),table); entry=gtk_label_new(用户名:); gtk_table_attach(GTK_TABLE(table),entry,0,1,0,1,GTK_FILL,GTK_FILL,0,0);/ entry=gtk_label_new(密码:); gtk_table_attach(GTK

17、_TABLE(table),entry,0,1,1,2,GTK_FILL,GTK_FILL,0,0);/ entry=gtk_label_new(确认密码:); gtk_table_attach(GTK_TABLE(table),entry,0,1,2,3,GTK_FILL,GTK_FILL,0,0);/ re_user.userName=gtk_entry_new_with_max_length(20); gtk_table_attach(GTK_TABLE(table),re_user.userName,1,3,0,1,GTK_FILL,GTK_FILL,0,0);/ re_user.pa

18、sswd=gtk_entry_new_with_max_length(10); gtk_entry_set_visibility(GTK_ENTRY(re_user.passwd),FALSE); gtk_table_attach(GTK_TABLE(table),re_user.passwd,1,3,1,2,GTK_FILL,GTK_FILL,0,0);/ re_user.agaPasswd=gtk_entry_new_with_max_length(10); gtk_entry_set_visibility(GTK_ENTRY(re_user.agaPasswd),FALSE); gtk_

19、table_attach(GTK_TABLE(table),re_user.agaPasswd,1,3,2,3,GTK_FILL,GTK_FILL,0,0);/ resButton=gtk_button_new_with_label(注册); gtk_table_attach(GTK_TABLE(table),resButton,2,3,3,4,GTK_FILL,GTK_FILL,0,0);/ g_signal_connect(G_OBJECT(resButton),clicked,G_CALLBACK(reg_handle),&re_user); g_signal_connect(G_OBJ

20、ECT(window),destroy,G_CALLBACK(quit),NULL); gtk_widget_show_all(window); gtk_main(); 423 用户界面设计用户设计界面截图用户设计界面代码void chatmain_dialog()/登录进入之后的自己聊天好友记录界面 GtkWidget *window; GtkWidget *table; GtkAdjustment *horizontal; GtkAdjustment *vertical; GtkWidget *scrollWindow; GtkWidget *frame; GtkWidget *entry

21、; GtkWidget *button1; GtkWidget *button2; /GtkWidget *button3; char c20; window=gtk_window_new(GTK_WINDOW_TOPLEVEL); chatMain_dialog=window; gtk_window_set_title(GtkWindow *)window,小强聊天室); gtk_window_set_default_size(GTK_WINDOW(window),150,300); gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS

22、_CENTER); table=gtk_table_new(12,12,TRUE); gtk_container_add(GTK_CONTAINER(window),table);/printf(%sn,useName); sprintf(c,%s的好友列表,useName); entry=gtk_label_new(c); gtk_table_attach(GTK_TABLE(table),entry,0,12,0,1,GTK_FILL,GTK_FILL,0,0); frame=gtk_frame_new(NULL);/新建一个框架 gtk_frame_set_shadow_type(GTK

23、_FRAME(frame),GTK_SHADOW_IN);/框架的模式是outline在里面 gtk_table_attach(GTK_TABLE(table),frame,0,12,1,11,GTK_FILL,GTK_FILL,0,0); list=gtk_list_new();/GTK_SELECTION_SINGLE selection可以是NULL 或对一个已选项目, 包含一个GList* pointer. gtk_list_set_selection_mode(GtkList *)list,GTK_SELECTION_SINGLE); vertical=GTK_ADJUSTMENT(

24、gtk_adjustment_new(0,0,0,1,10,0);/初始值,最小值,最大值,步进的调整增量. 页面的调整的增量.显示页面的大小. horizontal=GTK_ADJUSTMENT(gtk_adjustment_new(0,0,0,1,10,0); scrollWindow=gtk_scrolled_window_new(horizontal,vertical);/创建一个滚动条,包括水平和垂直的 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWindow) ,GTK_POLICY_AUTOMATIC,GTK_

25、POLICY_AUTOMATIC);/设置水平和垂直滚动条都是需要时才出现 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWindow),list);/将列表构件加入滚动窗口中 gtk_container_add(GTK_CONTAINER(frame),scrollWindow); gtk_list_scroll_vertical(GTK_LIST(list),GTK_SCROLL_END,1);/ upda_num=0; button1=gtk_button_new_with_label(选择好友); gtk

26、_table_attach(GTK_TABLE(table),button1,7,11,11,12,GTK_FILL,GTK_FILL,0,0); button2=gtk_button_new_with_label(更新列表); gtk_table_attach(GTK_TABLE(table),button2,1,5,11,12,GTK_FILL,GTK_FILL,0,0); /button1=gtk_button_new_with_label(有新消息); /gtk_table_attach(GTK_TABLE(table),button1,9,12,11,12,GTK_FILL,GTK_

27、FILL,0,0); g_signal_connect(G_OBJECT(button1),clicked,G_CALLBACK(seleFriend),NULL); g_signal_connect(G_OBJECT(button2),clicked,G_CALLBACK(updaFriend),NULL); g_signal_connect(G_OBJECT(window),destroy,G_CALLBACK(quit_mainChat),NULL); gtk_widget_show_all(window); gtk_main();4.2.4聊天界面设计聊天界面设计截图聊天界面设计代码v

28、oid chat_with_friend(guint i)/和好友聊天的对话框,并进行聊天 char friName20; /先要创建聊天的对话框,再将聊天的内容以及要聊天好友的信息传送给服务器端 GtkWidget *dialog; GtkWidget *table; GtkWidget *recv_list;/接收 GtkWidget *send_entry;/发送 GtkWidget *scrollWindow;/滚动窗口 GtkAdjustment *horizontal; GtkAdjustment *vertical;/横向和纵向的调整对象 GtkWidget *send_butt

29、on; GtkWidget *frame; /printf(%dn,friends.Friendi.status); if(friends.Friendi.status!=1)/表示不在线 g_print(该好友不在线,不能发送消息!n); return; dialog=gtk_window_new(GTK_WINDOW_TOPLEVEL); chatDialogi.dialog=dialog; sprintf(friName,好友%s,friends.Friendi.name); gtk_window_set_title(GtkWindow *)dialog,friName); gtk_wi

30、ndow_set_default_size(GTK_WINDOW(dialog),100,300); gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER);/printf(3lihuajien); table=gtk_table_new(10,6,TRUE); gtk_container_add(GTK_CONTAINER(dialog),table);/将表格加入到对话框中 /printf(1buzhidaon);/滚动窗口,并设置滚动条出现的情况(都是需要时才出现) vertical=GTK_ADJUSTMENT(gtk_adjustment_new(0,0,0,1,10,0); horizontal=GTK_ADJUSTMENT(gtk_adjustment_new(0,0,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1