qiaoke_song 发表于 2018-5-14 20:51:58

【文件传输示例】C# WinForm WebSocket (非浏览器)

说明:
这是做的比较认真的一个练习,因为基本上每段都加上了中文注释。
一、设置
服务端:在Server文件夹内,SystemNet_define.cs
设置服务地址,这里设置为:
public static string ServerAddress = "ws://127.0.0.1:9999"; // 服务地址、端口
密钥、套接字分隔符都可自行设置。
客户端:Client文件夹内,SystemNet_define.cs
设置链接地址:
public static string ServerAddress = "ws://127.0.0.1:9999/FServer"; // 服务地址,接口
密钥、分隔符与服务端一致就可以。

套接字只需在服务端随意设置为不同的短语就可以,客户端登录后,会从自行从服务端取得并判断,
所以在判断代码中用不了switch,全部用 if else 了。

因为不会搭建rstp服务,所以在媒体预览上面就用IIS了,将IIS目录指向SERVER_FILES文件夹,
设置Server文件夹内,SystemNet_define.cs文件的套接字:
public string Transport_StreamMedia = "http://127.0.0.1:8081"; // 媒体文件预览地址
为IIS地址、端口就可以了,如IIS为80端口,直接"http://127.0.0.1"

二、传输文件
上传:客户端将文件分割为服务端限定的大小数据包,加上标识,发送到服务端,服务端接收后合并数据包为文件。
下载:与上传相同。
有新文件后,客户端会有新文件提醒,点击顶部刷新可更新当前显示。

分割文件的每个包为一段Base64字符串,并进行压缩,还原文件先解压缩字符串在合并Base64字符串,转为文件,
使用Base64字符串是因为传输byte,图像、媒体文件后打开错误,比如传输byte,生成图像文件是需要指定格式,
才能正确生成,等等。所以Base64最然大了点,但经过压缩后传输还可以。
也可用其它传输方法,有更高的效率,这里只是做练习。可以参考压缩文件内WebSocket-Sharp文件传输例子。

三、运行
根据你的需要修改、编译完毕后,先运行在Server文件夹内File_transferServer.exe
再运行Client文件夹内File_transferClient.exe
用户名:1000~1028,密码:123456

四、包含文件
websocket-sharp-master组件源代码,可在github上下载最新版
SQK_UI组件修改代码,可在http://bbs.cskin.net/thread-4394-1-1.html下载demo及说明
VLC的媒体文件DLL库,在Client文件夹内plugins目录

五、没做部分
1、服务端管理界面没做,只是打开运行就可以,可自行写用户管理等;
2、客户端:上传文件限制大小、上传下载数量限制没加上去,规则已经加到数据结构里面了,只是没有判断;
3、发送文件给用户个人部分没做,原理相同懒得写了。
4、会话没做,因为前面做过了,http://bbs.cskin.net/thread-4394-1-1.html
其他的都有。

另:注意LinQ语句筛选使用Find或FindALL,使用Where在线程中会出问题。登录时,使用“微软拼音”会出故障,换个输入法
数据库用Access在多用户使用会有问题,可以换其他库,
只是学习过程中的一个练习。
效果图:




源码下载-回复可见:
**** Hidden Message *****

qq744980696 发表于 2018-5-15 00:03:03

看看看看看看看看看看

zzusyy 发表于 2018-5-15 07:53:32

回复下载

zzusyy 发表于 2018-5-15 07:59:52

你好提取码是多少呀

lightweight 发表于 2018-5-15 09:50:29

谢谢分享,来看看

乔克斯 发表于 2018-5-15 13:14:00

百度网盘没有发提取码,无法下载。

蛋C饭 发表于 2018-5-15 13:21:21

看看 看看 看

hukun19930617 发表于 2018-5-15 14:38:14

学习学习

andy12 发表于 2018-5-15 16:29:11

借鉴下界面

qqxiongyi 发表于 2018-5-15 16:46:30

漂亮漂亮
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【文件传输示例】C# WinForm WebSocket (非浏览器)