.NET Framework基础知识(二)(转载)
1、课外:为什么object数组可以赋值给object类型,int数组却不能赋值给int类型?
答:因为不管是什么什么数组都继承自Array,而Array又继承自object。
2、线程:是操作系统分配处理器时间的基本单元。
3、支持抢先多任务处理的操作系统可以创建多个进程中的多个线程同时执行的效果。
实现:在需要处理器时间的线程之间分割可用处理器时间,并轮流为每个线程分配处理器时间片。当前执行的线程在其时间片结束时被挂起,而另一个线程继续运行。当系统从一个线程切换到另一个线程时,它将保存被抢先的线程的上下文,并重新加载线程队列中下一个线程的已保存线程上下文。
4、.NET 用Thread创建并控制线程。注意:引入using
例:class Program
{
static void Main(string[] args)
{
ThreadStart ts = new ThreadStart(F1);
Thread th1 = new Thread(ts);
ThreadStart ts1 = new ThreadStart(F2);
Thread th2 = new Thread(ts1);
th1.Start();
th2.Start();
th1.Abort();
}
static void F1()
{
while (true)
{
Console.WriteLine("00000");
Thread.Sleep(200);
}
}
static void F2()
{
while (true)
{
Console.WriteLine("11111");
Thread.Sleep(200);
}
}
}
5、线程的几个方法:Abort终止线程执行,Sleep使线程睡眠一段时间,方法的参数单位为毫秒,Join可以使线程阻塞
以join为例实现线程阻塞:
class Program
{
static Thread ThrTest1, ThrTest2;
static void Main(string[] args)
{
ThreadStart TS1 = new ThreadStart(F1);
ThrTest1 = new Thread(TS1);
ThreadStart TS2 = new ThreadStart(F2);
ThrTest2 = new Thread(TS2);
ThrTest1.Start();
ThrTest2.Start();
}
public static void F1()
{
for (int i = 0; i < 20;i++ )
{
if (i == 10)
{
ThrTest2.Join();
}
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine(i.ToString()+"F1");
Thread.Sleep(500);
}
}
public static void F2()
{
for (int i = 0; i < 20; i++)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(i.ToString()+"F2");
Thread.Sleep(500);
}
}
}
6、lock用来实现同步控制,在几个窗口同时在卖火车票或几个售货员同时在卖东西等可以用到lock。
以卖书为例:
class Program
{
static void Main(string[] args)
{
BookShop a = new BookShop();
Thread t2 = new Thread(new ThreadStart(a.Sale));
t2.Name = "李四";
Thread t1 = new Thread(new ThreadStart(a.Sale));
t1.Name = "张三";
t2.Start();
t1.Start(); }
}
public class BookShop
{
int num = 50;
int i = 0;
int j = 0;
public void Sale()
{
while (num>0)
{
lock (this)
{
if (num > 0)
{
Thread.Sleep(5);
num = num - 1;
Console.WriteLine(Thread.CurrentThread.Name + "售出一本!");
if (Thread.CurrentThread.Name=="张三")
{
i++;
}
else
{
j++;
}
}
else
{
Console.WriteLine(Thread.CurrentThread.Name + "没有了!");
Console.WriteLine("李四售出{0}本,张三售出{1}本!",j,i);
if (i > j)
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("李四是笨笨!");
Console.ResetColor();
}
else
{
Console.WriteLine("张三是笨笨!");
} }
}
}
}
}
7、TCP/IP:网络通讯协议,由网络层的IP协议和传输层的TCP协议组成的,是供已连接因特网的计算机进行通信的通信协议。
8、在.net中,我们用TCPClient和TCPListener类来实现点对点通讯,命名空间位于System.Net.Sockets
TcpListener类提供一些简单方法,用于在阻止同步模式下侦听和接受传入连接请求。可以使用TcpClient和Socket来连接TcpListener。可使用IPEndPoint、本地IP地址及端口号或者仅使用端口号,来创建TcpListener。
TcpClient类提供的一些简单方法,用于在同步阻止模式下通过网络来连接、发送、和接收流数据。
以一个简单控制台聊天机器人为例:
服务端: using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading; namespace Server
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("server");
TcpListener server = new TcpListener(IPAddress.Parse("***.***.***.***"), 9999); //服务端的IP地址
server.Start();
TcpClient clinet = server.AcceptTcpClient();
NetworkStream netstream = clinet.GetStream();
Thread th = new Thread(ReadText);
th.Start(netstream);
StreamWriter swriter = new StreamWriter(netstream);
while (true)
{
Console.WriteLine("---------------------------");
string con = Console.ReadLine();
swriter.WriteLine(con);
swriter.Flush();
Console.WriteLine("服务:" + DateTime.Now);
Console.WriteLine("---------------------------");
}
}
static void ReadText(object o)
{
NetworkStream netstream = o as NetworkStream;
StreamReader sr = new StreamReader(netstream);
while (true)
{
Console.WriteLine("---------------------------");
string con = sr.ReadLine();
Console.WriteLine(con);
Console.WriteLine("客户:" + DateTime.Now);
Console.WriteLine("---------------------------");
} }
}
}
客户端: using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading; namespace Client
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("client");
TcpClient client = new TcpClient("***.***.***.***", 9999); //服务端的IP地址
NetworkStream netstream = client.GetStream();
StreamWriter swriter = new StreamWriter(netstream);
Thread th = new Thread(ReadText);
th.Start(netstream);
while (true)
{
Console.WriteLine("---------------------------");
string con = Console.ReadLine();
swriter.WriteLine(con);
swriter.Flush();
Console.WriteLine("客户:" + DateTime.Now);
Console.WriteLine("---------------------------");
} }
static void ReadText(object o)
{
NetworkStream netstream = o as NetworkStream;
StreamReader sr = new StreamReader(netstream);
while (true)
{
string con = sr.ReadLine();
Console.WriteLine("---------------------------");
Console.WriteLine(con);
Console.WriteLine("服务:" + DateTime.Now);
Console.WriteLine("---------------------------");
} }
}
}
这是一个一对一的聊天程序,大家可以结合以前学过的知识实现多对多的聊天程序。 本文出自 “大懒丫头” 博客,请务必保留此出处http://lanyatou.blog.51cto.com/3306130/624863
.NET Framework基础知识(二)(转载)的更多相关文章
- RabbitMQ基础知识(转载)
RabbitMQ基础知识(转载) 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- 菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理
菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向O ...
- Dapper基础知识二
在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper? 首先Dapper是支持多种数据库的 ...
- python基础知识(二)
python基础知识(二) 字符串格式化 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 print(' %s is boy'%('tom')) ----> ...
- .NET Framework基础知识总结
之前给大家总结了java的面试几次技巧总结,同学们看了觉得还是不错,能够得到大家的认可,感觉还是挺不错的.现在又有同学来想小编索要.NET面试的总结了,好吧.谁让小编这么好呢!以下是.NET面试之框架 ...
- Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
- Java基础知识二次学习-- 第一章 java基础
基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...
- 快速掌握JavaScript面试基础知识(二)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
随机推荐
- 【Thinkphp学习】TP3.2.3在PHP5.5环境下运行非常慢
在做项目时遇到了一个瓶颈问题:老项目迁移到PHP5.5环境后打开网页很卡很慢. 服务器环境为:apache+php5.5.38+mysql,使用框架为Thinkphp3.2.3. 经过多方面排查找到了 ...
- 1.1 Introduction中 Consumers官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Consumers 消费者(Consumers) Consumers label t ...
- 学习笔记:Vue——动态组件&异步组件
动态组件 01.在动态组件上使用keep-alive,保持组件的状态,以避免反复重渲染导致的性能问题. <!-- 失活的组件将会被缓存!--> <keep-alive> < ...
- VUE笔记 - 过滤器 Vue.filter 形参默认值 @keyup.f2 自定义按键修饰符
过滤器函数的传参: 第一个参数 A 是固定的,表示要过滤之前的内容. 第二个参数 B,表示要把原本的内容 A 过滤成 B. 写函数内容时, 这里第二处只写个参数. 实际的值要写到管道符调用函数的括号内 ...
- 14、序列化操作,类的保存和dict转JSON
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...
- [python]类与对象-下
[实例对象]可以简称为[实例] 一.类与对象的关系 [类]是[对象]的模板. [类]就像工厂的模具,以它为模板,造出来的成千上万的产品,才是被我们消费.购买.使用,真正融入我们生活的东西.这些产品,在 ...
- 学习 Perl(一) —— 安装及 hello world
所谓存在的即是合理的,尤其适用于琳琅满目的编程语言界.每种编程语言在设计之初均只为解决特定领域的特定问题而生,没有语言擅长所有的领域能够完美地解决所有的问题. 这里推荐一本经典的 perl 入门书:P ...
- Java核心技术 卷Ⅰ 基础知识(7)
第13章 集合 集合接口 具体的集合 在表中,除了Map结尾的类之外,其他类都实现了Collection接口,而以Map结尾的类实现了Map接口. 链表 数组列表 散列集 树集 双端队列 优先级队列 ...
- Leetcode之Best Time to Buy and Sell Stock
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- POJ 题目2823 Sliding Window(RMQ,固定区间长度)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 46507 Accepted: 13442 ...