Crazy Learning for Day 16

来源:互联网 发布:有气泡的软件 编辑:程序博客网 时间:2024/05/18 18:16

    • Static 与 C 中的 Static
    • C中委托delegate和事件event

1、There are inconsistent line endings in the ‘xxx’ script. Some are Mac OS X (UNIX) and some are Windows.问题解决

http://blog.dou.li/There-are-inconsistent-line-endings-in-the-xxx-script-Some-are-Mac-OS-X-UNIX-and-some-are-Windows.html

2、IP就是一台电脑和主机在网络中的地址

外网IP

局域网IP(192.168…..)

端口号就是主机上某个服务器软件的地址

TCP : 发送消息需得到确认,得到响应后才成功

UDP:只关注发送消息

TCP 的三次握手:确认你在不在,我在,那好我把消息发给你

3、设计模式

解决同一种问题,应用在各种软件系统中,使用设计模式可以让代码格式更简洁

面向对象设计中常见的设计原则

  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 最少知识原则(迪米特法则)
  • 少用继承多用组合(合成复用)

上述原则的作用:让自己设计实现出来的软件系统更加稳定,容易维护,并具有一致性。

设计模式书籍

Static 与 C# 中的 Static

http://www.cnblogs.com/dawenhao/p/4902910.html

在java中为什么要把main方法定义为一个static方法

  • 1、首先介绍一下static这个修饰符
    在类中,变量的前面有修饰符static称为静态变量(类变量),方法的前面有修饰符static称为静态方法(类方法)。静态方法和静态变量是属于某一个类,而不属于类的对象。

  • 2、如果一个方法没有用static来修饰的话就说明这是一个成员方法,只能通过对象来调用这个方法

  • 3、在Java程序运行时,是没有实例化任何对象的,只能通过调用类方法来运行main方法,

所以会用static来修饰

5、简单网络游戏开发实例

同步:Synchronize
异步:Asynchronism

同步和异步的概念:

  • 进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事情。
  • 异步:当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

  • 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

  • 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

C#中委托(delegate)和事件(event)

先来看看事件编程有哪些好处。

在以往我们编写这类程序中,往往采用等待机制,为了等待某件事情的发生,需要不断地检测某些判断变量,而引入事件编程后,大大简化了这种过程:

  • 使用事件,可以很方便地确定程序执行顺序。
  • 当事件驱动程序等待事件时,它不占用很多资源。事件驱动程序与过程式程序最大的不同就在于,程序不再不停地检查输入设备,而是呆着不动,等待消息的到来,每个输入的消息会被排进队列,等待程序处理它。如果没有消息在等待,则程序会把控制交回给操作系统,以运行其他程序。
  • 事件简化了编程。操作系统只是简单地将消息传送给对象,由对象的事件驱动程序确定事件的处理方法。操作系统不必知道程序的内部工作机制,只是需要知道如何与对象进行对话,也就是如何传递消息。

委托(delegate)——可以理解为函数指针,不同的是委托是面向对象的,而且是类型安全的。

事件(event)
  我们可以把事件编程简单地分成两个部分:事件发生的类(书面上叫事件发生器)和事件接收处理的类。事件发生的类就是说在这个类中触发了一个事件,但这个类并不知道哪个个对象或方法将会加收到并处理它触发的事件。所需要的是在发送方和接收方之间存在一个媒介。这个媒介在.NET Framework中就是委托(delegate)。在事件接收处理的类中,我们需要有一个处理事件的方法。好了,我们就按照这个顺序来实现一个捕获键盘按键的程序,来一步一步说明如何编写事件应用程序。

我们现在对委托做一个总结:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If … Else(Switch)语句,同时使得程序具有更好的可扩展性。

http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html


网络课程学习目录

  • 创建服务器端控制台应用程序
  • 创建服务器端Socket并绑定IP和端口号
  • 开发服务器端的发送数据和接收数据
  • 实现服务器端异步的消息接收

服务器端代码

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;namespace TCPServer{    class Program    {        static void Main(string[] args)        {            StartServerASync();            Console.ReadKey();        }        //同步发送消息,只能一条一条发送,需要采用异步的方式,持续不断的收发消息        static void StartServerASync()        {            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            IPAddress ipAddress = IPAddress.Parse("192.168.0.124");            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 88);            serverSocket.Bind(ipEndPoint);//绑定ip和端口号            serverSocket.Listen(0);//开始监听端口号            Socket clientSocket = serverSocket.Accept();//接收一个客户端连接            //向客户端发送一条消息            string msg = "Hello Client! 你好...";            byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);            clientSocket.Send(data);            //接收客户端的一条消息            //byte[] dataBuffer = new byte[1024];            //int count = clientSocket.Receive(dataBuffer);            //string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer, 0, count);            //Console.WriteLine(msgReceive);                //Console.ReadKey();            //clientSocket.Close();            //serverSocket.Close();            //异步接收消息            //byte[] dataBuffer = new byte[1024];            clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);        }        static byte[] dataBuffer = new byte[1024];        static void ReceiveCallBack(IAsyncResult ar)        {            Socket clientSocket = ar.AsyncState as Socket;            int count = clientSocket.EndReceive(ar);            string msg = Encoding.UTF8.GetString(dataBuffer, 0, count);            Console.WriteLine("从客户端接收到数据:" + msg);            clientSocket.BeginReceive(dataBuffer, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket);//回调        }    }}

客户端代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net.Sockets;using System.Net;namespace TCPClient{    class Program    {        static void Main(string[] args)        {            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            clientSocket.Connect(new IPEndPoint(IPAddress.Parse("192.168.0.124"), 88));            //客户端接收消息,收发顺序与服务器端相反            byte[] data = new byte[1024];            int count = clientSocket.Receive(data);//Receive执行后才继续执行下面代码            string msg = Encoding.UTF8.GetString(data, 0, count);            Console.Write(msg);            while (true)            {                string s = Console.ReadLine();                //Console.Write(s);                clientSocket.Send(Encoding.UTF8.GetBytes(s));            }            Console.ReadKey();            clientSocket.Close();        }    }}