C# .NET中Socket简单实用框架的使用教程

C#.NET中Socket简单实用框架的使用教程

什么是Socket框架?

Socket框架是一种网络编程模型,被广泛应用于各种网络通信应用程序的开发中,包括聊天工具、文件传输、视频会议等。Socket框架通过封装了底层的TCP/IP协议,提供了一种简单、灵活且高效的网络编程模型。通常情况下,使用Socket框架编写网络应用程序需要掌握C#语言和.NET框架的基础知识,而使用Socket框架的实际步骤则可以参照下文所述。

实现步骤

1. 创建服务器端

要使用Socket框架实现服务器端,首先需要在C#中使用System.Net.Sockets一个命名空间。然后,通过TcpListener类的构造函数创建TcpListener对象。代码如下:

using System.Net.Sockets;

TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 1234);

在服务器端代码中,首先需要创建一个Socket对象,此处IP为本地回环地址127.0.0.1,端口号为1234。

接下来,调用TcpListener类的Start()方法,来开启监听指定的端口。

listener.Start();

在服务器端等待客户端连接时,需要使用Accept()方法,创建一个Socket对象与客户端进行通信。

Socket socket = listener.AcceptSocket();

2. 创建客户端

使用C#的Socket框架来实现客户端与服务器连接,需要使用TcpClient类。客户端的代码如下:

using System.Net.Sockets;

TcpClient client = new TcpClient("127.0.0.1", 1234);

同样,在客户端编写代码时,需要指定连接的服务器的IP地址和端口号。

3. 数据收发

在Socket框架中,我们使用NetworkStream类来传输数据。具体实现时,需要创建一个NetworkStream对象,然后利用该对象提供的流进行数据的收发。在服务器端和客户端均如此实现。示例如下:

服务器端代码:

using System.Net.Sockets;
using System.Text;

byte[] buffer = new byte[1024];
int bytes = socket.Receive(buffer);
string message = Encoding.ASCII.GetString(buffer, 0, bytes);

byte[] data = Encoding.ASCII.GetBytes("Hello, client!");
socket.Send(data);

客户端代码:

using System.Net.Sockets;
using System.Text;

byte[] data = Encoding.ASCII.GetBytes("Hello, server!");
client.GetStream().Write(data, 0, data.Length);

byte[] buffer = new byte[1024];
int bytes = client.GetStream().Read(buffer, 0, buffer.Length);
string message = Encoding.ASCII.GetString(buffer, 0, bytes);

在上述代码中,我们对数据使用了编码格式,在代码中可以看到,实现了Ascii的编码方式。客户端使用GetStream()函数获得NetworkStream对象,调用Write()方法向服务端发送数据。服务端同理使用Receive()方法接收数据,再用Send()方法发送回客户端。

示例

接下来给出两个小示例(分别是客户端和服务器端),以更加具体直观地讲解Socket框架实用教程。

1. 客户端

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = new TcpClient();
            client.Connect("127.0.0.1", 8888);

            NetworkStream stream = client.GetStream();

            string input;

            while ((input = Console.ReadLine()) != null)
            {
                byte[] message = Encoding.ASCII.GetBytes(input);

                stream.Write(message, 0, message.Length);

                byte[] buffer = new byte[1024];
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);

                Console.WriteLine(response);
            }

            stream.Close();
            client.Close();
        }
    }
}

2. 服务器端

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 8888);
            listener.Start();

            Console.WriteLine("Server running...");

            TcpClient client = listener.AcceptTcpClient();
            Console.WriteLine("Client connected");

            NetworkStream stream = client.GetStream();

            byte[] buffer = new byte[1024];

            while (true)
            {
                int bytesRead = stream.Read(buffer, 0, buffer.Length);
                string input = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                Console.WriteLine(input);

                byte[] message = Encoding.ASCII.GetBytes("ACK: " + input);
                stream.Write(message, 0, message.Length);
            }

            stream.Close();
            client.Close();
            listener.Stop();
        }
    }
}

在运行以上这两个示例代码时,首先启动服务器端,然后再启动客户端。当客户端启动后,就可以在控制台中输入所需发送的消息,服务端会回复收到的信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# .NET中Socket简单实用框架的使用教程 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • ASP.NET Core实时库SignalR简介及使用

    ASP.NET Core实时库SignalR简介及使用 在本攻略中,我们将详细介绍ASP.NET Core实时库SignalR的概念、工作原理和使用方法。我们将提供两个示例说明,演示如何使用SignalR实现实时通信。 SignalR概述 SignalR是一个ASP.NET Core实时库,用于实现实时通信。它可以在服务器和客户端之间建立持久连接,以便实时推…

    C# 2023年5月16日
    00
  • C#使用正则表达式过滤html标签

    下面是使用C#过滤html标签的完整攻略。 1. 正则表达式 我们知道,HTML标签的特点是以<开头,以>结尾,并且中间可能会有一些属性,例如<div class=”my-class”>。为了过滤掉HTML标签,我们可以使用正则表达式,其中最基础的正则表达式如下: <[^>]+> 这个表达式表示匹配所有以<开头…

    C# 2023年6月7日
    00
  • C#中abstract的用法详解

    C#中abstract的用法详解 简介 abstract 是C#中一个重要的关键字,表示抽象,它用于定义抽象类或抽象方法,是实现面向对象中重要的机制。一个抽象类不能被直接实例化,而只能作为基类被其他类继承。从抽象类继承的子类,必须实现该抽象类中的abstract方法,才能被实例化。在C#中,抽象类和抽象方法通常用于建立基础类和组件,使代码具有更强的可重用性。…

    C# 2023年5月15日
    00
  • .NET中的多线程-并行编程

    .NET中的多线程-并行编程 在.NET框架中,多线程编程可以提高程序的性能和并发能力。.NET框架提供了一系列的类和API,用于简化多线程编程。本文将介绍.NET中的多线程-并行编程,并给出一些示例代码。 什么是多线程? 多线程是指一个进程中有多个线程同时执行。每个线程都是独立的执行路径,可以同时执行不同的代码。多线程编程可以提高程序的性能和响应速度,特别…

    C# 2023年4月18日
    00
  • C#实现对Json字符串处理实例

    下面我会详细讲解如何用C#实现对Json字符串处理的步骤以及示例。 环境搭建 首先,我们需要在本地电脑上安装一个C#的开发环境,例如Visual Studio,确保我们能够编写和调试C#代码。 然后,在我们的C#项目中添加一个Json.Net的引用,可以通过NuGet包管理器添加,也可以手动下载并安装。 对Json字符串的处理 有很多种方式可以在C#中对Js…

    C# 2023年5月15日
    00
  • ASP.Net Core3.0中使用JWT认证的实现

    ASP.NET Core 3.0中使用JWT认证的实现攻略如下: 安装必要的NuGet包 在开始之前,需要安装以下NuGet包: Microsoft.AspNetCore.Authentication.JwtBearer System.IdentityModel.Tokens.Jwt 您可以使用以下命令在命令行中安装这些NuGet包: dotnet add …

    C# 2023年5月16日
    00
  • 浅谈ASP.NET Core中间件实现分布式 Session

    浅谈ASP.NET Core中间件实现分布式 Session攻略 在ASP.NET Core中,Session是一种用于存储用户数据的机制。在本攻略中,我们将讨论如何使用ASP.NET Core中间件Middleware实现分布式Session,并提供两个示例说明。 分布式Session的工作原理 在ASP.NET Core中,Session是一种用于存储用…

    C# 2023年5月17日
    00
  • C#线程池操作方法

    下面我将为你详细讲解“C#线程池操作方法”的完整攻略。 C#线程池操作方法 线程池是C#多线程编程中一个非常重要的概念,它可以帮助我们管理线程的创建和销毁,避免线程频繁的创建和销毁导致的性能问题,提升程序的运行效率。下面我们将分别介绍线程池的创建、提交任务和销毁等操作方法。 创建线程池 在C#中创建线程池非常简单,只需要使用ThreadPool类的静态方法即…

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