C# Socket网络编程实例

下面给大家详细讲解一下“C# Socket网络编程实例”的完整攻略。

引言

在进行网络编程时,我们经常需要使用到Socket
,它是一种协议栈的API,它提供了网络编程在应用层的解决方案。在C#语言中,有着完备的Socket基础类库,我们可以简单的使用C# Socket类来进行网络编程。

Socket 常用方法

1. 创建 Socket

Socket socket = new Socket(AddressFamily.InterNetwork, 
    SocketType.Stream, 
    ProtocolType.Tcp);

2. 连接 Socket

IPAddress ip = IPAddress.Parse("127.0.0.1");//待连接的IP地址
IPEndPoint port = new IPEndPoint(ip, 5000);//待连接的端口号
socket.Connect(port);

3. 发送数据

string sendData = "你好,这是一个网络编程的实例!";
byte[] data = Encoding.ASCII.GetBytes(sendData);
socket.Send(data);

4. 接收数据

byte[] recvBytes = new byte[1024];
int byteRec = socket.Receive(recvBytes);
string recvData = Encoding.ASCII.GetString(recvBytes, 0, byteRec);

5. 释放 Socket

socket.Shutdown(SocketShutdown.Both);
socket.Close();

C# Socket编程实例

示例一:Socket TCP通信示例

服务端代码

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

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket serverSocket = null;
            try
            {
                serverSocket = new Socket(AddressFamily.InterNetwork,
                    SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
                serverSocket.Bind(ipEndPoint);
                serverSocket.Listen(20);
                Console.WriteLine("服务端已启动,等待客户端连接...");

                while (true)
                {
                    Socket clientSocket = serverSocket.Accept();
                    string str = "欢迎连接服务端!";
                    byte[] buffer = Encoding.UTF8.GetBytes(str);
                    int iLength = clientSocket.Send(buffer);
                    Console.WriteLine("发送消息给客户端成功,消息内容:{0}", str);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("服务器出现异常,异常信息:{0}", ex.Message);
            }
            finally 
            {
                serverSocket?.Close();
            }
        }
    }
}

客户端代码

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

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket clientSocket = null;
            try
            {
                clientSocket = new Socket(AddressFamily.InterNetwork, 
                    SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
                clientSocket.Connect(ipEndPoint);

                if (clientSocket.Connected)
                {
                    byte[] buffer = new byte[1024];
                    int iLength = clientSocket.Receive(buffer);
                    string str = Encoding.UTF8.GetString(buffer, 0, iLength);
                    Console.WriteLine("接收到服务端消息:{0}", str);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("客户端出现异常,异常信息:{0}", ex.Message);
            }
            finally 
            {
                clientSocket?.Close();
            }
        }
    }
}

示例二:Socket UDP通信示例

服务端代码

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

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket server = new Socket(AddressFamily.InterNetwork, 
                SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
            server.Bind(endPoint);
            Console.WriteLine("服务端已启动,等待数据接收...");

            IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
            EndPoint ep = (EndPoint)iep;

            while (true)
            {
                byte[] buffer = new byte[1024];
                int iLength = server.ReceiveFrom(buffer, ref ep);
                string message = Encoding.Default.GetString(buffer, 0, iLength);
                Console.WriteLine("接受到客户端消息:{0}", message);
            }
        }
    }
}

客户端代码

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

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
            string message = "Hello server";
            byte[] data = Encoding.Default.GetBytes(message);
            client.SendTo(data, data.Length, SocketFlags.None, iep);
            Console.WriteLine("已经向服务端发送数据:{0}", message);
        }
    }
}

以上是本次的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Socket网络编程实例 - Python技术站

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

相关文章

  • C#服务器NFS共享文件夹搭建与上传图片文件的实现

    下面是“C#服务器NFS共享文件夹搭建与上传图片文件的实现”的完整攻略。 搭建NFS服务器 安装NFS服务器软件 在Linux系统上搭建NFS服务器,首先需要安装NFS服务器软件。可以使用以下命令安装: sudo apt-get install nfs-kernel-server 创建NFS共享目录 在Linux系统上,需要创建一个目录作为NFS共享目录。可…

    C# 2023年6月1日
    00
  • CodeBuilder 3 预览版发布

    CodeBuilder是一款强大的代码生成工具,目前发布了 3.0 preview 2,大家可以前去下载体验 官方主页。 1、多种数据源 基于 ADO.NET 的数据驱动 基于 Fireasy 3,支持从 SqlServer、MySql、Oracle、Firebird、PostgreSql、SQLite、达梦、人大金仓、神通数据库,以及 OleDb 驱动。可…

    C# 2023年4月27日
    00
  • NI-DAQmx驱动安装完成后不能使用怎么办?

    当NI-DAQmx驱动安装完成后不能使用时,我们可以按照以下步骤进行解决: 1. 确认系统是否支持NI-DAQmx驱动 NI-DAQmx驱动有系统要求,如果不符合要求,则可能出现不能使用的情况。具体的系统要求可以参考NI官方网站上的文档。 示例1:比如NI-DAQmx驱动最低要求为Windows 7/10 64位操作系统,如果你在一个32位系统上安装NI-D…

    C# 2023年6月7日
    00
  • Mysql动态更新数据库脚本的示例讲解

    下面为您详细讲解“Mysql动态更新数据库脚本的示例讲解”。 1. 什么是动态更新数据库脚本? 动态更新数据库脚本是指根据实际需求的变化,随时修改已经存在的数据库脚本。这种方式比直接在数据库中手动添加表格和字段要灵活方便得多。 2. Mysql动态更新数据库脚本的实现方法 MySQL的动态更新数据库脚本主要是使用ALTER后续跟着的语句操作。比如: ALTE…

    C# 2023年6月1日
    00
  • C#实现HTTP访问类HttpHelper的示例详解

    C#实现HTTP访问类HttpHelper的示例详解 1. 什么是HttpHelper类 HttpHelper类是一个用于实现HTTP访问的工具类,通过该类可以实现Http的GET、POST、PUT、DELETE等请求。 2. 如何使用HttpHelper类 使用HttpHelper类需要先引入命名空间: using System.Net; 接着,可以通过以…

    C# 2023年5月15日
    00
  • C#实现谷歌翻译API示例代码

    下面我将详细讲解“C#实现谷歌翻译API示例代码”的完整攻略。 1. 确定使用的开发工具和翻译API 首先,我们需要确定使用的开发工具和翻译API。C#是微软公司推出的一种面向对象的编程语言,而谷歌翻译API是由谷歌公司提供的一种机器翻译服务。 2. 注册谷歌翻译API并获取API密钥 在使用谷歌翻译API之前,我们需要先注册一个开发者账号,并获取一个API…

    C# 2023年5月31日
    00
  • C# 基于NPOI操作Excel

    C#基于NPOI操作Excel 在C#中,我们可以使用NPOI操作Excel文件。NPOI是一个开源的.NET库,它提供了对Microsoft Office的读取和写入支持。在本文中,我们将介绍使用NPOI操作Excel的完整攻略。 安装NPOI 要使用NPOI,我们需要先安装它。我们可以通过NuGet安装NPOI。在Visual Studio中,依次打开”…

    C# 2023年5月31日
    00
  • C#实现简单俄罗斯方块

    C#实现简单俄罗斯方块 简介 俄罗斯方块是经典的休闲益智游戏之一,玩家需要操作方块进行移动、旋转使其落到底部并消除行。而我们可以通过C#语言来实现这个小游戏。 前置知识 在开始之前,需要具备一定的C#编程基础,以及对屏幕绘制和输入处理有一定的了解。 实现步骤 定义类 我们需要定义一个TetrisBlock类来表示方块,同时定义一个TetrisGame类来控制…

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