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日

相关文章

  • c#数据绑定之数据转化为信息的示例

    关于c#数据绑定之数据转化为信息的示例,我可以给出以下完整攻略: 一、准备工作 在开始之前你需要提前准备以下内容: 一个c#编程环境,比如Visual Studio; 一个数据库或数据源,比如SQL Server; 熟悉c#的基础知识,包括.NET Framework、Windows Forms以及数据绑定。 二、基本概念 在讲解示例之前,我们需要先了解一些…

    C# 2023年5月31日
    00
  • 基于.net的分布式系统限流组件示例详解

    让我们来详细讲解一下关于“基于.net的分布式系统限流组件示例详解”的完整攻略。 1. 什么是分布式系统限流? 在一个分布式系统中,由于不同的模块可能会同时发起大量请求,对于一个稳定的服务而言,需要对这些请求进行限制,以避免系统过载导致的服务不可用或响应变慢情况。这个过程就被称为分布式系统限流。 2. 基于.net的分布式系统限流组件 本篇攻略介绍的是基于.…

    C# 2023年6月6日
    00
  • C#单线程和多线程端口扫描器详解

    C#单线程和多线程端口扫描器是一个非常实用的工具,可以用于检测指定主机的开放的端口,同时也能够帮助我们识别潜在的网络安全问题。 1. 单线程端口扫描器 单线程端口扫描器是指利用单个线程进行端口扫描的工具。使用单线程扫描器时,程序将按照给定范围逐个测试每个端口,如果端口开放,则输出结果。 下面是一个基于C#语言的单线程端口扫描器示例: using System…

    C# 2023年5月15日
    00
  • .NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)

    .NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)攻略 在 .NET 中,IoC(Inversion of Control)模式是一种设计模式,它包括依赖反转(DIP)、控制反转(IoC)和依赖注入(DI)三个概念。这些概念都是为了解决应用程序中的依赖关系问题而提出的。下面将详细介绍这三个概念。 依赖反转(DIP) 依赖反转(DIP…

    C# 2023年5月17日
    00
  • 调试ASP.NET2005/2008时,端口不正确的解决三套方案

    针对ASP.NET2005/2008调试时端口不正确的情况,有以下三种解决方案。 方案一:更改ASP.NET应用程序的端口 首先,在“解决方案资源管理器”中选择要调试的ASP.NET应用程序,并右键单击该应用程序文件夹。然后,选择“属性”选项,进入“Web”选项卡。在“Web服务器”区域内的“端口”栏处输入正确的端口号,并点击“确定”保存设置即可。 示例说明…

    C# 2023年6月3日
    00
  • c#中oracle的to_date函数使用方法

    讲解C#中Oracle的to_date函数使用方法需要以下过程: 第一步:了解to_date函数 在Oracle中,to_date函数是用来将字符串转化为日期类型的函数。它的常用语法如下: to_date(‘日期字符串’, ‘日期格式化字符串’) 其中,日期字符串是要转化的字符串,日期格式化字符串则表示日期字符串的表现形式,例如’yyyy-mm-dd’。 在…

    C# 2023年6月1日
    00
  • Google.Protobuf工具在C#中的使用方法

    下面是“Google.Protobuf工具在C#中的使用方法”的完整攻略: 前置条件 在使用 Google.Protobuf 工具之前你需要安装 .NET Core SDK 和 Google.Protobuf 工具,安装方法如下: 安装 .NET Core SDK (1) 下载 .NET Core SDK(选择最新版本)安装包。 (2) 执行安装包,一路点击…

    C# 2023年6月1日
    00
  • MongoDB数据库介绍并用.NET Core对其进行编码

    MongoDB是一种文档数据库,它以BSON(二进制JSON)为数据存储格式,支持索引、联表查询和文档级锁定等特性。下面将为大家详细介绍MongoDB数据库,并提供两条.NET Core编码示例。 MongoDB数据库介绍 MongoDB的优点 数据以文档形式存储 BSON格式的数据存储格式 支持动态查询语言 可伸缩性强 可自身提供容错保护 支持二进制数据存…

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