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日

相关文章

  • .NET Core Web APi类库内嵌运行的方法

    以下是“.NET Core Web API类库内嵌运行的方法”的完整攻略: 什么是.NET Core Web API类库内嵌运行 .NET Core Web API类库内嵌运行是一种机制,它允许您将.NET Core Web API类库嵌入到其他应用程序中,并在应用程序中运行它们。这种机制可以使您的应用程序更加灵活和可扩展。 .NET Web API类库内嵌…

    C# 2023年5月12日
    00
  • 基于C#制作考试答题系统

    基于C#制作考试答题系统攻略 制作考试答题系统包括设计系统的界面、编写代码实现功能、搭建数据库、测试系统等多个部分。下面将详细讲解制作考试答题系统的完整攻略。 第一步:设计系统界面 考试系统的界面设计要尽可能简洁明了,需要包括考试题目、答案选项、计时器等模块。可以使用C#中的Windows Form应用程序来实现系统的设计。可以参考示例1中的代码: //建立…

    C# 2023年6月1日
    00
  • C#基于XNA生成随机颜色的方法

    当您开发基于XNA的C#游戏时,您可能需要生成随机颜色,例如用于绘制游戏对象。下面是简单的方法,您可以使用它来生成随机颜色。 方法一 使用Random对象,随机生成颜色的RGB值,然后使用Color.FromRgb方法将RGB值转换为颜色对象,最后使用颜色对象进行绘制。 Random random = new Random(); Color randomCo…

    C# 2023年6月3日
    00
  • Unity Shader模拟玻璃效果

    下面是Unity Shader模拟玻璃效果的完整攻略,具体步骤如下: 1. 创建材质 在Unity编辑器中创建新的材质,命名为“Glass Shader”。选择“Standard”着色器,并将材质类型设置为“Transparent”。 2. 设置贴图 将透明度地图贴图到Alpha通道,并将高光贴图设置为透明的。 3. 编写Shader 在着色器中,需要定义一…

    C# 2023年6月3日
    00
  • C#实现上位机与欧姆龙PLC通讯(FINS)

    C#实现上位机与欧姆龙PLC通讯(FINS)的完整攻略 背景介绍 欧姆龙PLC是一种常见的现场控制设备,与上位机进行通讯可以实现对PLC控制的监管和控制。而C#作为一种常见的编程语言,也可以用来实现上位机和PLC的通讯。本文将介绍如何使用C#实现上位机和欧姆龙PLC的通讯。 实现步骤 创建C#项目 在Visual Studio中创建一个C#项目。 导入Omr…

    C# 2023年5月15日
    00
  • winfrom 打印表格 字符串的封装实现代码 附源码下载

    下面是关于“winform打印表格字符串的封装实现代码附源码下载”的完整攻略: 一、背景介绍 在实际开发中,我们经常会遇到需要打印表格字符串的需求,例如打印报表、流水账单等等。在C#的winforms框架中,可以通过调用PrintDocument类的Print方法来实现打印功能。然而,PrintDocument类并没有提供直接打印表格字符串的方法,因此需要我…

    C# 2023年5月15日
    00
  • ASP.net Substitution 页面缓存而部分不缓存的实现方法

    ASP.NET Substitution 页面缓存是指在对于某些页面的内容经常变化的情况下,我们可以启用页面缓存,但仍然让部分内容保持实时刷新的功能。本篇攻略将会为大家介绍如何实现此功能。 使用 Substitution 控件 我们可以使用 Substitution 控件的方式来实现 ASP.NET Substitution 页面缓存而部分不缓存的功能,具体…

    C# 2023年6月3日
    00
  • c#数据绑定之数据转化为信息的示例

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

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