懒人服务器的客户端开发包是有DotNet版本的,
且支持 DotNet4.0(XP适用)和 DotNet4.5(Win7/Win8/Metro适用);
同时也兼容 Mono,所以可用于跨平台开发(结合Xamarin可用于手机开发)。
DotNet版本与Java版本的客户端开发包,在使用上是非常类似的,
主要也是使用核心类 TcpDataClient 进行连接、发送和断开等操作。
不过在DotNet版本的例子中,我们将会使用WindowsForm作为程序的界面,
因此,在流程安排上会有点不同。
比如说,我们会在WinForm的Load事件中连接服务器;
而在WinForm的FormClosed事件中断开与服务器的连接。
客户端例子的完整代码如下:
在DotNet的客户端例子中,我们要注意的是DotNet的一对关键字 async/await 。
这两个关键字所修饰的函数都是异步执行的。
这表示,TcpDataClient在这里被调用到的函数都是异步执行的。
而实际上,不管是Java版的TcpDataClient还是DotNet版本的TcpDataClient,
它所有与网络相关的函数操作都是异步执行的。
在DotNet里面,async/await 这对关键字非常神奇,
它让所有异步操作的代码,写起来就跟写同步操作的代码一样,
具有便于阅读和理解的连贯性,但同时又不会在执行过程中形成阻塞。
且支持 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 这对关键字非常神奇,
它让所有异步操作的代码,写起来就跟写同步操作的代码一样,
具有便于阅读和理解的连贯性,但同时又不会在执行过程中形成阻塞。