初学c# -- 学习笔记 小结

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

一、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,先用服务端添加一个文件,要不客户端打不开。

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

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

时间: 2024-10-10 22:17:31

初学c# -- 学习笔记 小结的相关文章

初学c# -- 学习笔记(二)

接着前面的学习,对话建立了,下面就写对话框气泡,和微信的差不多那种.尖角对话气泡网上一堆,圆尖角的修改了一个.IE8以下不能用,其他都可以用,直接上html代码,将<style>内容用到你的程序里面就能达到一样的效果,没用js文件,没用图片.强大的CSS3,真的很强大. html代码 <style> .Message_Left { width: auto; height: auto; margin-left: 200px; max-width:390px; min-width:90

初学c# -- 学习笔记(四)

想想,数据库先用mysql了,这玩意小且安装方便.前面web学了些,现在学winform的.数据库先看看便捷的mysql. 下载了一个mysql5.7版的,装上居然找不到密码,重装3.4回,找不到,说是随机密码,在某某文件里面,查了好多资料,大多数纯属扯淡. 实际测试,终于搞好了. 安装后,设置路径,这个网上资料都一样. 然后管理员权限运行cmd,进入mysql文件夹的bin文件夹: 输入:mysqld --initialize-insecure 看清楚啊是'--',两个-.就建立了空密码,如果

初学视觉学习笔记----保存并显示图片(打开两个相机)

以下代码可以实现的功能: 打开两个相机:抓拍图片以及获取图片的其他信息(如创建的时间):图像处理并把结果显示在hWindowCountrl:把图像在PicBox上显示(图片适应窗口大小): 查看原图(窗口适应图片的大小)//我觉得这个方法不太好用,再学习学习,找机会修改一下. 用到的相机: USB相机,S500A3B高拍仪(或者笔记本自带相机) 楼主还是一个小白,程序可能写的不好,但是均在自己电脑上运行成功^^,有需要的可以按需自取. using System;using System.Coll

BASH 学习笔记小结

1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您

初学c# -- 学习笔记(五) winfrom自定义滚动条

找了些例子,要么庞大.要么搞个安装组件什么的,我要求能用就行了.实在找例子修改麻烦,就做了一个.其实实现挺简单,就是panel或图片什么的跟着鼠标走就行了. 这里panel自己可以加背景图或直接搞个图就行了.为了演示清楚,有个滚动条控件做对比,与自定义的同步. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u

初学c# -- 学习笔记(七) RichTextBox支持GIF

园子里许明吉博客写的一篇,刚好用到这个,写的非常好.转过来了 不过在应用中也有一些问题,win10下不能中文输入,凑合着进行了修改, 下面是原来的代码: private void button2_Click(object sender, EventArgs e) { IList<MemoryStream> _List = gifRichTextBox1.LoadSelectFile(); for (int i = 0; i != _List.Count; i++) { File.WriteAl

初学c# -- 学习笔记(三)

结合前面学的许多东西,写了一个小程序.会话.自定义滚动条.css等等.小程序没有用数据库,主要不知道该用哪种,以后再说吧.登录也简单,就输入用户名就可以了. 百度是个好东西,写程序时候,需要什么图就直接抓下来. 滚动条可以自己定义一个图片,这里凑合事,随便画了个.只做了""频道""部分,其他没写,原理一样,就不费时间了.窗体右边不知道放些什么,就空着了. 由于没有数据库,栏目什么的都放数组里面了.无刷新的有2个部分,一个是会话,一个是消息数量,在哪个栏目里随时刷新哪

初学c# -- 学习笔记(八)

RichTextBox我服了,背景透明.宽度高度自适应.图片背景透明.gif动画等等都tm实现困难无比,搞来搞去,就最后一题做不出来了: RichTextBox不管什么背景,透明背景也好,图片背景也罢,在添加图片时,图片的透明背景底色始终是RichTextBox的背景色,不管你有没有设RichTextBox的背景色, 没有设就默认白色了,这题没法做了. 不搞了,用 WebBrowser了.

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*