小冠花花种哪家便宜?

小说:小冠花花种哪家便宜?作者:安海通更新时间:2019-05-20字数:73709

一名身着紧身黑衣的女护卫头领从墙头跳下,半跪给李庆安行了一礼。

山西可以种植红玉兰吗?

外表看上去不管是颜色,眼神,形态都和宠物小精灵世界神兽当中的海之神或者称之为银鸟的洛奇亚一模一样,虽然是以机械金属装甲制造的,但是但从外表看的话却犹如真的洛奇亚一般活灵活现,不得不说布玛的手艺技术的确不是盖的。
“好朕就此宣布,任命太子系为征东诏讨使,天下兵马大元帅,任命高仙芝为副帅,统兵二十万,三天后正式出兵荆襄。”

钱诺眉头一皱,将这玉符祭起,玉符之中一道云光射入到了钱诺的眉心。

网络编程的重要性就不说了,先上源码:https://github.com/nnhy/NewLife.Net.Tests

一个服务端,就是监听一些端口,接收客户端连接和数据,进行处理,然后响应。

/// <summary>定义服务端,用于管理所有网络会话</summary>
class MyNetServer : NetServer<MyNetSession>
{
}

/// <summary>定义会话。每一个远程连接唯一对应一个网络会话,再次重复收发信息</summary>
class MyNetSession : NetSession<MyNetServer>
{
    /// <summary>客户端连接</summary>
    public override void Start()
    {
        base.Start();

        // 欢迎语
        var str = String.Format("Welcome to visit {1}!  [{0}]
", Remote, Environment.MachineName);
        Send(str);
    }

    /// <summary>收到客户端数据</summary>
    /// <param name="e"></param>
    protected override void OnReceive(ReceivedEventArgs e)
    {
        WriteLog("收到:{0}", e.Packet.ToStr());

        // 把收到的数据发回去
        Send(e.Packet);
    }
}

服务端核心类是NetServer,一般来说,每个网络服务端都会写一个自己的类来继承NetServer,以方便编写自己的NetSession会话逻辑。

实在简单的应用,也可以直接实例化NetServer,然后通过事件来处理收到的连接和数据。

这里我们写了个MyNetServer,没有任何代码,仅仅是为了指定使用哪个网络会话类。

网络会话NetSession非常重要,每一个Tcp连接就对应一个会话,对Udp来说同一个远端套接字(IP+端口)就是一个会话。

网络会话最重要的有几块:

  1. Start会话开始,Tcp三次握手之后,双方还没有发送数据包之前,此时可以做一些准备工作,或者向客户端发送欢迎语。Udp会话开始在第一个数据包达到时。
  2. OnReceive接收,每次收到数据包以后,都会触发该方法,数据包位于e.Packet。Tcp默认同步处理,未完成当前数据包处理之前,不会接收本连接的下一个数据包。
  3. Send发送。发送Packet数据包给本会话连接的客户端,扩展方法支持发送字符串或数据流。

!!!注意:粘包问题在OnReceive之前处理,下回有专门文章分析,接收数据的ReceivedEventArgs里面还有个Message,支持编码器对数据包进行解码成为消息。

 

本例程是Echo回声程序,因此OnReceive把收到的数据包原样发回去。

服务端用法很简单

static NetServer _server;
static void TestServer()
{
    // 实例化服务端,指定端口,同时在Tcp/Udp/IPv4/IPv6上监听
    var svr = new MyNetServer
    {
        Port = 1234,
        Log = XTrace.Log
    };
    svr.Start();

    _server = svr;
}

指定端口和日志,然后就可以开始服务了。

默认在Tcp/Udp/IPv4/IPv6上监听,客户端爱用哪个协议来连接都行。

当然,NetServer还可以支持多个端口同时监听,共用数据处理代码。

 

客户端用法更简单

var uri = new NetUri("tcp://127.0.0.1:1234");
var client = uri.CreateRemote();
client.Log = XTrace.Log;
client.Received += (s, e) =>
{
    XTrace.WriteLine("收到:{0}", e.Packet.ToStr());
};
client.Open();

for (var i = 0; i < 5; i++)
{
    Thread.Sleep(1000);

    var str = "你好" + (i + 1);
    client.Send(str);
}

client.Dispose();

这里的NetUri直接从字符串里面解析协议、地址、端口,然后CreateRemote建立客户端。这里会自动识别Tcp/Udp。

也是指定日志,方便我们查看工作过程。还有两个开关 LogSend/LogReceive能输出更详细的数据包日志。

Received事件里面处理收到的数据包。

Open开始连接服务端,如果网络不同,这里会抛出异常。Tcp客户端有断线重连机制。

发送数据包也很简单,直接Send就好,高级应用需要在发送后等待响应数据,可以用 await SendAsync。

 

因为程序很简单,也可以用telnet命令来测试该服务端。

 

编辑:龙平陵安

发布:2019-05-20 05:28:17

当前文章:http://cnsdbtzg.com/19525.html

红瑞木几月份种植? 凌霄花什么时候可以进行种植呢? 紫藤树值钱吗? 60公分蜀桧价格多少钱 1.8元一棵上车价 【劲爆价】只需花一块钱就能买到的凌霄花竟然就在眼皮子底下 5公分金镶玉竹哪里最多? 1公分紫竹哪里最多? 甘肃可以种植金叶榆吗?

65692 79894 55848 11877 45869 86806 13976 59481 33381 10742 14929 81127 83624 23824 35527 70305 69809 83043 27461 59598

我要说两句: (0人参与)

发布