教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

基于Linux点对点聊天文件传输系统(5)

来源:网络收集 时间:2026-07-17
导读: 内蒙古工业大学毕业设计说明书 于处理客户请求并建立C/S对话,服务完成后,关闭此新线程与户的通信链路,并将其终止;4、返回第2步,等待另一客户请求;5、关闭服务器。服务器端流程图如图2-2所示。 客户端程序流程

内蒙古工业大学毕业设计说明书

于处理客户请求并建立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字,全部文档内容请下载后查看。喜欢就下载吧 ……
基于Linux点对点聊天文件传输系统(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/615650.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)