基于TCP协议通信的文件传输系统之服务端

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

服务端界面如下:
Biblioteka Baidu
IP为服务端本机IP,端口可自行设计,在启动服务按钮里, 可实现从输入的IP和端口实例化一个套接字:

socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
以上便是我们小组服务端、客户端程序的 实现。最大的困难便是用文件流的形式打开 要发送的文件,并存入到字节数组中。这个 思路是陈典告诉我们的,很谢谢他。
但是我们到目前为止,还没有解决如何将 大数据分包发送的问题,因此现阶段的程序 版本还不完善。
Thank your watching!
• TextBox Button控件 • richTextBox1:显示消息;包括连接服务器,与服务器连接成功时 也由此返回消息;接收文件时,接收文件名,文件长度消息;文件 接收完成时,由此处向用户返回文件保存成功的消息。 • richTextBox2:输入服务器的IP地址,此处输入的IP文本并由 IPAddress ip捕获 • richTextBox3:同IP的获取方式相同。 • button1:由此按钮来控制向服务器发送连接请求
加了this的sfd.ShowDialog(this),“另存为” 窗口的指针才能被SaveFileDialog的对象调用, 若不加this SaveFileDialog 的对象调用的是 本类的其他窗口则不会弹出另存为的窗口
接收文件: 首先接收文件名及其属性,然后接收到文件大小,弹出对话框后需要 根据先前接收到的文件属性来保存文件类型。 流程:1、先定义缓存区 2、接收数据到缓存区 3、保存文件使用 SaveFileDialog控件弹出保存文件对话框 4、保存文件
• // 创建包含IP和端口号的网络节点对象;
• 上述三条语句可在按下启动服务按钮后创建一个用来负责监听的套接字 • 在创建好了一个套接字过后,服务端便可以监听客户端的连接请求了。我 们使用了一个集合的形式用来表示已连接上服务端的客户端相关信息:
• • • • • • • • • • • Dictionary<string, Socket> dict = new Dictionary<string, Socket>(); //做一个集合以便用来包含已有的套接字 Dictionary<string, Thread> dictThread = new Dictionary<string, Thread>(); //做一个集合以便用来包含已有的线程 在监听到一个客户端的连接请求过后,就将该客户端的信息添加到在线列表控件中直观显示, 同时也添加到线程的集合和套接字的集合: Socket sokConnection = socketWatch.Accept(); // 一旦监听到一个客户端的请求,就返回与该客户端通信的套接字 lbOnline.Items.Add(sokConnection.RemoteEndPoint.ToString()); // 向列表控件中添加客户端的IP信息; dict.Add(sokConnection.RemoteEndPoint.ToString(), sokConnection); // 将与客户端连接的套接字对象添加到原有套接字集合中;
基于TCP通信协议的文件传输系统
综述:本次编程中,我们小组从零起点实现了对C#中的Winform窗体应用 的创建,简单控件的使用,以及C#语言中的Thread类、FileStream类、Directory类、 IPAddress类、Socket类等类的简单使用。 我们小组的文件传输系统特点如下:1、基于TCP协议进行服务端和 客户端 的连接,需提供服务端本机IP地址;2、多个客户端可连接同一服务器;3、服务 端可主动选取客户端发送本地文件。 程序目前的缺点如下:1、发送文件不能超过100KB,大数据不能分包发 (还在解决中);2、客户端不能自动存入文件名和文件格式;。。。
其中的txtSelectFile为通过选择文件按钮获取的文件名,并将其存入到 的文本框 另外,我们还定义了一个Byte数组用来发送文件的信息,即文件名和 文件格式以及该文件转化为的字节数。
最后使用BlockCopy函数将arrFile字节数组复制到arrFileSend 字节数组中,然后将arrFileSend字节数组发送到客户端:
• 为了使服务端能够顺利发送文件到客户端,我们写了一个实时用 来判断客户端是否连接上服务端的子函数,使用了try…catch…语句用 来捕获程序运行中的异常情况:
• 在本次编程中,我们认为最大的困难是文件的打开以及如何将其 正确存储到Byte数组中,从而将Byte数组发送至客户端。我们的思路 是使用文件流的形式打开要发送的文件,然后使用Read函数从当前流 中读取文件数据到一个Byte数组中:
• //本条语句用来实例化一个套接字 • IPAddress address = IPAddress.Parse(richTextBox2.Text.Trim()); • // 获得文本框中的IP对象
• IPEndPoint endPoint = new IPEndPoint(address, int.Parse(richTextBox3.Text.Trim()));
客户端
• 需求功能:连接到tcp服务器后,被动接受服务器的文件传输请求, 接受文件并保存到客户端本地 • 主界面:
• 流程 • 1、创建socket套接字,获取IP地址对象,绑定套接字到 IP和端口上(此处与前面服务器创建负责监听的套接字类 似) • 2、经三次握手连接服务器 • 3、当服务器向此客户端发送文件时弹出对话框接收并保 存文件
相关文档
最新文档