基于Linux点对点聊天文件传输系统(5)
内蒙古工业大学毕业设计说明书
于处理客户请求并建立C/S对话,服务完成后,关闭此新线程与户的通信链路,并将其终止;4、返回第2步,等待另一客户请求;5、关闭服务器。服务器端流程图如图2-2所示。
客户端程序流程图:1、指定想与之建立连接的服务器相应服务的保留端口号;2、向服务器发送connect请求并等待服务器的应答;3、接收到服务器建立连接的响应后接受服务器相应服务;4、服务请求结束后关闭通信通道并终止。客户端流程图如图2-3所示。 开始 初始化 监听请求连接 否 连接是否成功是 建立连接 通信否 是 是否关闭服务器 结束
图2-2 服务器端系统流程图
开始初始化请求连接否连接是否成功是否结束否是 建立连接是通信结束图2-3 客户端系统流程图
11
内蒙古工业大学毕业设计说明书
第三章 详细设计说明
3.1 界面设计
3.1.1 界面的生成过程
将界面设计好后,要为窗口内的每一个控件设置属性,包括触发的事件、所发出的信号、和调用的回调函数等。最后单击Glade主窗口上的“联编”(Build)按钮,这样就会在本工程目录下自动生成所有关于界面的代码和回调函数原型。程序编译:打开终端,输入命令:
$./autogen.sh
完成后再输入make命令。
Glade能够产生用来生成图形用户界面的所有文件。其中main.c文件是程序的主文件,它包含了C程序的初始化函数main(),窗口的创建语句window1=create_ window1 (),窗口的显示语句gtk_widget_show (window1)。
glade生成的C源代码有:main.c,callbacks.c,interface.c,support.c,还有几个头文件:callbacks.h,interface.h,support.h。原代码全部位于工程的子目录 src 下。其中在interface.c声明了程序中使用到的参数和回调函数,而在callbacks.c中实现回调函数,想要实现窗口内各构件的具体功能还需要修改callbacks.c源代码。在callback.c文件内有所有的回调函数的函数体为空,要在函数体内写入所要执行的语句,其中自定义的函数也要写在callback.c里面。例如:选择文件按钮的回调函数
Void on_button9_clicked(GtkButton *button,gpointer user_data) {
GtkWidget *fileselection1; if(isconnected==FALSE) return; fileselection1=create_fileselection1 (); gtk_widget_show (fileselection1); }
第一个参数是一个指向发出信号的构件的指针,第二个参数是一个指向数据的指针,是由信号连接函数的参数传进来的数据。函数体则完成文件选择构件的创建及显示功能。
12
内蒙古工业大学毕业设计说明书
3.1.2 生成的界面
本系统为服务器端和客户端设计了相同的主界面,在运行程序后通过主界面上的两个单选按钮,选择在连接中做为服务器端或客户端。同时在选择发送文件时也使用了相同发送文件界面。
1、服务器端界面如图3-1所示。
图3-1 服务器端主界面
2、选择发送文件界面如图3-2所示。
图3-2 选择发送文件界面
3、客户端界面如图3-3所示。
13
内蒙古工业大学毕业设计说明书
图3-3 客户端主界面
3.2 初始化模块设计
通过主界面内选择服务器或客户端点击初始化按钮完成端点创建。服务器端建立端点后,创建Socket对象,绑定端口,监听连接。客户端建立端点后,同样创建Socket对象,向服务器端发出连接请求。
服务端初始化后会创建一个套接字对象并给这个对象填充地址结构,包括所使用的网络协议、IP、端口号。使用bind()将套接字绑定到8080端口,开始监听连接请求。当有收到连接请求,定义客户端Socket地址结构client_addr。将accept()接收的客户端的Socket内容写入client_addr中。连接成功要显示连接成功信息,同时配发一个新的线程用于接收信息。
主要代码端如下:
//程序段说明:首先定义一个套接字对象,给这个对象赋值来创建套接字,然后对这个套接字进行赋值。
struct sockaddr_in my_addr;
if((sockfd = Socket(AF_INET,SOCK_STREAM,0)) == -1) {
perror(\ exit(1); }
14
内蒙古工业大学毕业设计说明书
my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero),8);
//函数说明:将套接字和已知端口绑定
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr)) == -1) {
perror(\ exit(1); }
//监听函数:监听客户端请求,实现连接,创建多线程 void listen_client(void) {
GtkTextIter iter; listen (server_fd,1);
client_fd=accept(server_fd,(structsockaddr*)&client_addr, &addr_size); gdk_threads_enter();
gtk_text_buffer_get_end_iter(buffer2,&iter);
gtk_text_buffer_insert(buffer2,&iter,\地址为 \gtk_text_buffer_get_end_iter(buffer2,&iter); gtk_text_buffer_insert(buffer2,&iter,(gchar *)inet_ntoa(client_addr.sin_addr),-1); }
服务器端初始化程序流程如图3-4所示。
15
gtk_text_buffer_get_end_iter(buffer2,&iter);
gtk_text_buffer_insert(buffer2,&iter,\ 的客户端已连接!\\n\gdk_threads_leave(); isconnected=TRUE;
g_thread_create((GThreadFunc)get_message,NULL,FALSE,NULL);
…… 此处隐藏:768字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




