.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用

下面我就来详细讲解“.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用”的完整攻略:

Winform程序运行结构图

在Winform程序的运行结构图中,分为用户界面层、业务逻辑层和数据访问层三层。用户界面层是Winform界面,它通过调用业务逻辑层的方法实现需要的功能。业务逻辑层是Winform程序中的核心,处理界面中的业务逻辑并将数据传递到数据访问层,以完成数据的持久化工作。数据访问层则用于数据存储,提供数据的CRUD操作。

TCP协议在Winform中的应用

TCP协议是Winform程序中常用的协议之一,具有可靠性和稳定性等优点。在Winform中,通过TCP协议可以实现多人在线互动功能,如聊天室、游戏等。

示例1:实现简单的聊天室

以下是一段简单的TCP协议代码,实现了基本的客户端和服务器端的通信:

// 服务器端代码
TcpListener listener = new TcpListener(IPAddress.Any, 8888); // 监听本地IP和端口
listener.Start();

while (true) {
    TcpClient client = listener.AcceptTcpClient(); // 接受客户端的连接
    NetworkStream stream = client.GetStream(); // 获取客户端的网络流

    byte[] buffer = new byte[1024]; // 创建缓存区
    int bytesRead = stream.Read(buffer, 0, buffer.Length); // 从网络流中读取客户端的数据
    string message = Encoding.ASCII.GetString(buffer, 0, bytesRead); // 将读取到的数据转换为字符串

    Console.WriteLine("Received message: " + message); // 打印接收到的消息

    client.Close(); // 关闭客户端连接
}

// 客户端代码
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 8888); // 连接服务器端

string message = "Hello, server!"; // 设置要发送的消息
byte[] buffer = Encoding.ASCII.GetBytes(message); // 将消息转换为字节数组

NetworkStream stream = client.GetStream(); // 获取客户端的网络流
stream.Write(buffer, 0, buffer.Length); // 将消息写入网络流

client.Close(); // 关闭客户端连接

示例2:通过TCP协议实现在线游戏

以下是一段使用TCP协议实现在线游戏的代码示例:

// 服务器端代码
TcpListener listener = new TcpListener(IPAddress.Any, 8888); // 监听本地IP和端口
listener.Start();

// 定义存储连接的客户端列表
List<TcpClient> clients = new List<TcpClient>();

while (true) {
    TcpClient client = listener.AcceptTcpClient();
    clients.Add(client);

    // 启动一个单独的线程用于处理客户端数据
    new Thread(() => {
        NetworkStream stream = client.GetStream(); // 获取当前客户端的网络流

        byte[] buffer = new byte[1024]; // 创建缓存区
        int bytesRead;

        while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) {
            // 遍历当前服务器所有的客户端,并将接收到的消息发送给它们
            foreach (TcpClient connectedClient in clients) {
                if (connectedClient != client) { // 避免给自己发送消息
                    NetworkStream connectedStream = connectedClient.GetStream();
                    connectedStream.Write(buffer, 0, bytesRead);
                }
            }
        }

        // 当客户端关闭连接时,从列表中移除该客户端
        clients.Remove(client);
        client.Close();
    }).Start();
}

// 客户端代码
TcpClient client = new TcpClient();
client.Connect("127.0.0.1", 8888); // 连接服务器端

// 启动一个单独的线程用于接收服务器端的数据
new Thread(() => {
    NetworkStream stream = client.GetStream();
    byte[] buffer = new byte[1024];
    int bytesRead;

    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) {
        string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);

        // 处理收到的消息
    }
}).Start();

// 向服务器端发送数据
string message = "Hello, game server!";
byte[] buffer = Encoding.ASCII.GetBytes(message);
stream.Write(buffer, 0, buffer.Length);

以上就是使用TCP协议在Winform中实现在线游戏和聊天室的基本代码。通过这些示例,您可以更好地了解和掌握TCP协议在Winform程序中的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#中foreach实现原理详解

    C#中foreach实现原理详解 在C#语言中,foreach可以用于遍历数组、集合和自定义类型等可迭代对象。本文将详细介绍foreach的实现原理,让读者更深入地了解该语法的运行机制。 foreach语法 foreach语法的基本形式如下: foreach (var variable in expression) { // code block } 其中,…

    C# 2023年6月7日
    00
  • C#调用QQ_Mail发送邮件实例代码两例

    关于C#调用QQ_Mail发送邮件实例代码,以下是完整攻略。 1. 准备工作 在使用C#编写代码发送QQ_Mail邮件前,你需要完成以下准备工作: 获取SMTP服务器地址和端口号,可以在QQ邮箱的设置中找到。 获得登录QQ邮箱时使用的邮箱地址和密码。 2. 示例1:使用System.Net.Mail.SmtpClient发送邮件 使用System.Net.M…

    C# 2023年5月15日
    00
  • C#实现创建桌面快捷方式与添加网页到收藏夹的示例

    创建桌面快捷方式: 首先,需要添加System.Runtime.InteropServices命名空间和System.Drawing命名空间,以调用Shell32.dll中的方法和绘制图标。 using System.Runtime.InteropServices; using System.Drawing; 然后,使用DllImport属性声明需要调用的方…

    C# 2023年6月7日
    00
  • 基于SqlSugar的开发框架循序渐进介绍(27)– 基于MongoDB的数据库操作整合

    SqlSugar的开发框架本身主要是基于常规关系型数据库设计的框架,支持多种数据库类型的接入,如SqlServer、MySQL、Oracle、PostgreSQL、SQLite等数据库,非关系型数据库的MongoDB数据库也可以作为扩展整合到开发框架里面,通过基类的继承关系很好的封装了相关的基础操作功能,极大的减少相关处理MongoDB的代码,并提供很好的开…

    C# 2023年4月17日
    00
  • C#如何实现图片的剪裁并保存

    下面是C#实现图片剪裁并保存的攻略,包含两个示例说明。 1.准备工作 在开始实现图片剪裁之前,需要先引用System.Drawing命名空间,该命名空间是提供处理图片的基本类。 在引用之前需要确保本地已安装.NET Framework SDK,如果未安装可在微软官网下载并安装。 如下所示: using System.Drawing; 其次,需要了解图片剪裁需…

    C# 2023年6月6日
    00
  • C# System.TypeInitializationException 异常处理方案

    当在C#程序中调用某个类或静态构造函数时,如果类的静态构造函数引发异常,System.TypeInitializationException异常将抛出。在这种情况下,程序将在控制台或日志中输出异常提示信息,并停止运行。针对这种情况,我们可以采取以下几种处理方案: 方案1:使用try…catch块处理TypeInitializationException异…

    C# 2023年6月6日
    00
  • AutoCAD二次开发系列教程01-如何在AutoCAD中输出Hello World

    目录 01项目环境准备 02代码示例 03输出示例 04总结 05源码地址 01项目环境准备 A.开发使用的软件:AutoCAD2016、VisualStudio2022 B.建立依赖的本地库(提前从AutoCAD软件安装目录拷贝开发时需要使用的库,如:accoremgd.dll) C.创建新的类库(.Net Framework),注意不同AutoCAD版本…

    C# 2023年5月5日
    00
  • 枚举的用法详细总结

    枚举的用法详细总结 枚举(Enumeration)是一种常用的数据类型,它可以定义一些有限的取值范围。枚举常用于程序中对一些离散的状态或类型的定义,也方便了程序的维护和理解。在本文中,我们将介绍枚举的定义、初始化、遍历以及一些常见的用法。 定义枚举 定义枚举可以使用C++11引入的关键字enum class,其语法如下: enum class 枚举名 { 枚…

    C# 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部