学了到了好些东西, 做了一些练习。

一、C# winform Socket

1、程序主要部分只是用了 Panel、Picturebox、Label、RicheditBox四个组件,滚动条、编辑框什么的都自定义了,应该比较容易看清楚。
2、服务端设定地址为192.168.0.103,端口设定为5188,客户端指向服务端也是这个地址,根据需要自行修改。
服务端:
//监听端口
private int port = 51888;
private TcpListener myListener;
ArrayList MessList = new ArrayList();
int MessCount = 0;
...
...
IPAddress[] addrIP = Dns.GetHostAddresses("192.168.0.103"); //ip地址
localAddress = addrIP[0];
客户端:
//建立网络通讯
try
{
client = new TcpClient("192.168.0.103", 51888); //定义服务器端ip地址和端口,与服务器端定义要一致
TcpInfo.AppendText("本机EndPoint:" client.Client.LocalEndPoint); //本机的ip地址和端口号
TcpInfo.AppendText("与服务器建立连接成功");
linkFlag = true;
}
catch
{
TcpInfo.AppendText("与服务器连接失败");
return;
}
3、程序运行时必须首先运行“服务端”的ChatServer.exe,点击“开始监听”后,再运行“客户端”的可执行文件,用户名随便起一个,密码随便填。服务端每个登录用户开1个线程,客户端开1个线程进行数据交互。
4、数据传输定义:
string[] sArray = getMess.Split(new char[6] { '[', ']', '$', '$', '$', '$' });
//sArray[1] 发送信息用户的ip
//sArray[3] 发送消息的版块
//sArray[4] 发送消息的内容
//sArray[5] 用户名
//sArray[6] 时间
服务端据此进行消息派发,客户端根据返回的消息分类显示。
5、由于使用绘图功能,会产生屏幕的闪烁,所以用生成位图的方式处理,达到减小闪烁。可能会产生信息更新较慢或不连贯,因为在最右侧将全部数据动作写了一遍。同时,由于在线程上不能对原组件进行添加等操作,所以按照右侧内容变化来更新数据信息显示:
 private void TcpInfo_TextChanged(object sender, EventArgs e)
 {.........}
绘图处理:
......
Bitmap localBitmap = new Bitmap(conter_panel.Width, conter_panel.Height);
 Graphics bitmapGraphics = Graphics.FromImage(localBitmap);
bitmapGraphics.Clear(BackColor);
bitmapGraphics.SmoothingMode = SmoothingMode.AntiAlias;
Draw(conter_panel.ClientRectangle, bitmapGraphics, 18, true, 0, Color.FromArgb(90, 143, 0), Color.FromArgb(90, 143, 0));
conter_panel.BackgroundImage = localBitmap;
conter_panel.Controls.Add(rc);
......
6、程序为了学习方便未使用数据库,所有数据交互都放在内存中进行。

二、Winform网盘(全格式音视频在线预览)

实际上就一简单的三层,客户端通过服务端连接数据库,服务端读写数据库发送到客户端。

1、程序功能:
使用VLC的媒体库(DLL),程序服务端支持大多数音频、视频等格式的预览,打开文件的方式为本地文件夹,将video、audio等文件夹和exe文件放在一起;
客户端支持大多数格式的音频、视频等格式的在线预览、下载,并可上传各类型文件到服务器。
视频文件:
.asf;.avi;.divx;.dv;.flv;.gxf;.m1v;.m2v;.m2ts;.m4v;.mkv;.mov;.mp4;.mpeg;.mpeg1;.mpeg2;.mpeg4;.mpg;
.mts;.mxf;.ts;.vob;.wmv;.m4a;.m4p;.mod;Webm;raw;rm;rmvb;
音频文件:
.mp1;.mp2;.mp3;.wav;.a52;.aac;.ac3;.dts;
.flac;.ogg;.ogm;.mka;
为避免偏差,强制了文件名,用MP4和MP3播放,让VLC去自己识别了,例如1234.avi.mp4,123.wav.mp3。
图像文件:
.bmp;.bid;.jpg;.jpeg;.jfif;.gif;.tif;.tiff;.png;.ico;
2、数据库:
使用sql2008,将数据库文件附加上去就可以了,批量文件处理,写了2个标量值函数和存储过程,通过程序传递参数调用存储过程来进行记录批量处理,级联关系看数据库关系图。
3、配置:
除sql2008外,部署IIS,将目录指向包含服务端EXE文件和文件夹的路径就可以了,设置匿名访问就行了,其他功能基本不用。
在程序里需自行设定你的SQL密码,用户为sa;IIS、客户端、服务端的ip都设为了192.168.0.103端口518888,根据需要自行修改,修改时注意,可能多个文件都要修改ip。
4、其他说明:
服务端是64位程序,也可改到32位,需将DLL文件替换成32位的,项目属性选择“首选32位”;客户端是32位的,也可以选择64位,替换成64位的DLL文件后,项目属性去掉“首选32位”。播放进度条和播放控制没做,程序里面有注释,或百度VLC相关资料。VLC为32位、64位2.24版本的,目前是最新版,关注VLC官网更新。
5、练习的内容:
cpu、内存监控;本地媒体文件播放;网络流媒体播放;winform文件远程下载;winform Socket文件上传等。
取得服务端文件用了2种方式,http和Socket,上传文件大家就不要参考百度的例子了,什么webclient、http类、winform aspx什么的,绝大多数用不成,能用的还老出问题,就别费劲了,只参考Socket文件上传文章就可以了,别走弯路了。
客户端程序上传每次20k,觉得慢自己改。有个问题,上传文件超过500M服务端会挂掉,因为c#的FromBase64String泄漏了,可以采用byte[]合并的方式分段,来解决该问题,请自行处理解决,其他转换方式就不要试了,不支持图像和音视频的格式。

用户:16000至16010,密码1234546,先用服务端添加一个文件,要不客户端打不开。

播放这块不全懒得做了,客户端全播放的放http://www.haolizi.net/example/view_10278.html

这里了

下载:https://pan.baidu.com/s/1slxZwVN

程序里面还有错误,不修改了,只是一些练习。

最新文章

  1. linux下发现可疑用户时处理办法
  2. qt越来越好了
  3. 对于旅游业的手机app的分析
  4. grunt安装_
  5. GET和POST的主要区别
  6. 首页的sitecontent地址
  7. 那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
  8. 修改MySQL引擎
  9. 走进C标准库(6)——"string.h"中函数的实现memchr
  10. mysql 时间类型分类
  11. ord()与char()
  12. PHP中private、public、protected的区别详解
  13. golang 笔记
  14. java日志框架之logback(一)——logback工程简介
  15. 法语Linux NuTyX 11 RC2 发布
  16. PHP字符串比较,看起来值完全一样,但是就是不相等的解决方案(‌)
  17. wget整站抓取、网站抓取功能;下载整个网站;下载网站到本地
  18. variable 'o' used without having been completely initialized Compiling Vertex program
  19. winform自动更新之AutoUpdater.NET
  20. 内部排序->选择排序->树形选择排序

热门文章

  1. 关于js的对象创建方法(简单工厂模式,构造函数模式,原型模式,混合模式,动态模式)
  2. CVE-2017-11882 POC 全版本通杀
  3. 如何在idea中引入一个新maven项目
  4. Spring Cloud(Dalston.SR5)--Zuul 网关-过滤器
  5. sublime text 3 vue 语法高亮
  6. tomcat 绑定域名 防止恶意域名绑定
  7. html5 + vue
  8. WordPress版微信小程序2.1.8版发布
  9. leetcode20:有效的括号
  10. Spring利用注解@Value获取properties属性为null