懒人服务器 - 教程三、了解如何应用(DotNet客户端)

懒人服务器的客户端开发包是有DotNet版本的,
且支持 DotNet4.0(XP适用)和 DotNet4.5(Win7/Win8/Metro适用);
同时也兼容 Mono,所以可用于跨平台开发(结合Xamarin可用于手机开发)。

DotNet版本与Java版本的客户端开发包,在使用上是非常类似的,
主要也是使用核心类 TcpDataClient 进行连接、发送和断开等操作。
不过在DotNet版本的例子中,我们将会使用WindowsForm作为程序的界面,
因此,在流程安排上会有点不同。
比如说,我们会在WinForm的Load事件中连接服务器;
而在WinForm的FormClosed事件中断开与服务器的连接。

客户端例子的完整代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Lazyboots.Network.Common;
using Lazyboots.Network.Client;

namespace SimpleLazybootsClient
{
    public partial class Form1 : Form
    {
        public const int STRING_ACTION  = 1002;
        public const int UPPERCASE_FUNC = 1;

        public Form1()
        {
            InitializeComponent();

            // 初始化界面控件的状态
            button1.Enabled = false;
            textBox1.Enabled = false;
            progressBar1.Visible = false;
            progressBar1.Style = ProgressBarStyle.Marquee;
            progressBar1.MarqueeAnimationSpeed = 10;

        }

        private async void Form1_Load(object sender, EventArgs e)
        {
            // 创建一个 TcpDataClient,用于连接服务器
            TcpDataClient client = new TcpDataClient();

            // 连接服务器
            await client.Connect("127.0.0.1", 9090);

            if (client.Code == 0)  // 如果连接成功,就让按钮可以点击
            {
                button1.Enabled = true;
                textBox1.Enabled = true;
            }
            else label1.Text = client.Message; // 如果连接失败,则显示错误信息
            
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            string str = textBox1.Text;
            if (str.Length <= 0) return;

            // 参数中的“STRING_ACTION(1002)”表示“请求字串转换指令”, 
            // 参数中的“UPPERCASE_FUNC(1)”则表示“请求大写转换功能”
            TcpDataClient client = new TcpDataClient(STRING_ACTION, UPPERCASE_FUNC);

            // 设置显示进度条
            progressBar1.Visible = true;

            // 获取并显示结果
            label1.Text = await client.GetString(str);

            // 隐藏进度条
            progressBar1.Visible = false;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // 创建一个 TcpDataClient,用于关闭连接
            TcpDataClient client = new TcpDataClient();

            // 关闭连接
            client.Disconnect();
        }

        
    }
}

在DotNet的客户端例子中,我们要注意的是DotNet的一对关键字 async/await 。
这两个关键字所修饰的函数都是异步执行的。

这表示,TcpDataClient在这里被调用到的函数都是异步执行的。
而实际上,不管是Java版的TcpDataClient还是DotNet版本的TcpDataClient,
它所有与网络相关的函数操作都是异步执行的。

在DotNet里面,async/await 这对关键字非常神奇,
它让所有异步操作的代码,写起来就跟写同步操作的代码一样,
具有便于阅读和理解的连贯性,但同时又不会在执行过程中形成阻塞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值