C#实现Socket通信的解决方法

C#实现Socket通信的解决方法,可以分为以下几个步骤:

步骤一:创建Socket对象

首先,需要使用C#提供的System.Net命名空间下的Socket类创建一个Socket对象,可以使用以下代码:

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

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

其中,AddressFamily.InterNetwork表示使用IPv4地址族,SocketType.Stream表示使用流协议,ProtocolType.Tcp表示使用TCP协议。

步骤二:建立连接

接下来的步骤是建立Socket连接。可以使用以下代码:

IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 8080;

IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

socket.Connect(remoteEP);

其中,ipAddress表示要连接的远程主机的IP地址,port表示要连接的远程主机的端口号,IPEndPoint表示远程主机的网络端点。

步骤三:发送和接收数据

连接建立完成后,可以使用Socket对象的Send()方法来发送数据,使用Receive()方法来接收数据。以下是一个发送和接收数据的示例:

// 发送数据
string msg = "Hello, World!";
byte[] msgBytes = Encoding.ASCII.GetBytes(msg);
socket.Send(msgBytes, msgBytes.Length, SocketFlags.None);

// 接收数据
byte[] buffer = new byte[1024];
int bytesRec = socket.Receive(buffer, SocketFlags.None);
string receivedMsg = Encoding.ASCII.GetString(buffer, 0, bytesRec);

Console.WriteLine(receivedMsg);

其中,socket.Send(msgBytes, msgBytes.Length, SocketFlags.None)表示发送数据,buffer表示接收数据的缓冲区,socket.Receive(buffer, SocketFlags.None)表示接收数据,string receivedMsg = Encoding.ASCII.GetString(buffer, 0, bytesRec)将接收到的字节数据转换为字符串。

示例1:简单的Socket服务器

下面是一个简单的Socket服务器示例:

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

class Program
{
    static void Main(string[] args)
    {
        TcpListener server = null;
        try
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 8080;

            server = new TcpListener(ipAddress, port);
            server.Start();

            byte[] bytes = new byte[1024];
            string data = null;

            while (true)
            {
                Console.WriteLine("等待客户端连接...");

                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("客户端已连接!");

                data = null;

                NetworkStream stream = client.GetStream();

                int i;

                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("接收到消息:{0}", data);

                    byte[] msg = Encoding.ASCII.GetBytes(data);

                    stream.Write(msg, 0, msg.Length);
                    Console.WriteLine("回复消息:{0}", data);
                }

                client.Close();
            }
        }

        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }

        finally
        {
            server.Stop();
        }

        Console.ReadLine();
    }
}

这个服务器程序会监听本地IP地址的8080端口,并等待客户端连接。一旦客户端连接成功,它就会接收客户端发送的消息,并将它们发送回客户端。

示例2:简单的Socket客户端

下面是一个简单的Socket客户端示例:

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

class Program
{
    static void Main(string[] args)
    {
        try
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 8080;

            TcpClient client = new TcpClient(ipAddress.ToString(), port);

            byte[] bytes = new byte[1024];
            string data = null;

            while (true)
            {
                Console.WriteLine("请输入要发送的消息:");

                data = Console.ReadLine();

                if (data == "exit")
                {
                    break;
                }

                NetworkStream stream = client.GetStream();

                byte[] msg = Encoding.ASCII.GetBytes(data);

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

                Console.WriteLine("消息已发送:{0}", data);

                int i;

                bytes = new byte[1024];
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("接收到的消息:{0}", data);
                }
            }

            client.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("连接出错: {0}", e.ToString());
        }

        Console.ReadLine();
    }
}

这个客户端程序会连接到一个本地地址和端口号为8080的服务器,并允许用户输入要发送的消息。它也会接收服务器发送的消息,并将它们显示在控制台上。当用户输入"exit"时,程序退出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现Socket通信的解决方法 - Python技术站

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

相关文章

  • C#实现将Doc文档转换成rtf格式的方法示例

    前言 本文将详细介绍如何使用C#将.doc文档转换成.rtf格式的方法示例。本文假设您已经了解C#编程语言,并且已经准备好在您的开发环境中进行编程和调试。 主要步骤 以下是将.doc文档转换成rtf格式的主要步骤: 加载.doc文档; 获取文档的数据流; 将数据流转换为.rtf格式; 将.rtf格式保存到文件或者输出流中。 详细说明 步骤1:加载.doc文档…

    C# 2023年6月1日
    00
  • C#如何处理JSON

    当使用C#开发Web应用或其他需要使用API的系统时,通常需要处理JSON来交换数据。JSON是一种轻量级的数据格式,易于读写和解析。下面是一些使用C#处理JSON的方法。 第一步:导入Newtonsoft.Json库 使用C#处理JSON的其中一种方法是使用Newtonsoft.Json库,它是一个开源的JSON框架,可以方便地将JSON字符串解析为C#对…

    C# 2023年5月14日
    00
  • 总结C#处理异常的方式

    总结C#处理异常的方式有以下几种: 1. 使用try-catch块 try-catch块是最常用的处理异常的方式。这里是一个示例: try { int a = 10; int b = 0; int c = a / b; } catch (Exception ex) { Console.WriteLine("发生了异常:" + ex.Mes…

    C# 2023年5月15日
    00
  • Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)

    导言 在网站开发过程中,常常需要处理一些文档的浏览和下载,比如Word、Excel、PDF、Txt等格式的文件。而在较早的浏览器版本中,这些文档通常需要下载后才能进行浏览。但是随着浏览器的升级和技术的发展,我们可以使用Asp.net技术实现直接在浏览器中预览这些文档,无需下载。本攻略将介绍如何使用Asp.net实现这个功能。 实现原理 Asp.net技术实现…

    C# 2023年6月3日
    00
  • ToLua框架下C#与Lua代码的互调操作

    ToLua是一款在Unity3D游戏引擎中使用的框架,它支持C#和Lua之间的相互调用和交互。下面我们来介绍ToLua框架下C#与Lua代码的互调操作的完整攻略。 步骤一:在Unity项目中配置ToLua 首先需要在Unity项目中下载并导入ToLua插件,导入完成后需要在菜单栏依次打开 ToLua/Generate All 按钮来生成适合Lua调用的C#代…

    C# 2023年5月15日
    00
  • ASP.NET Core使用功能开关控制路由访问操作

    ASP.NET Core使用功能开关控制路由访问操作 在ASP.NET Core应用程序中,我们可以使用功能开关来控制路由访问操作。功能开关是一种机制,可以在应用程序中启用或禁用特定的功能。在本文中,我们将介绍如何使用功能开关来控制路由访问操作,并提供一些示例来说明如何使用它们。 安装Microsoft.FeatureManagement.AspNetCor…

    C# 2023年5月17日
    00
  • C#中Invoke的用法讲解

    下面我来详细讲解一下C#中Invoke的用法。 1. 概述 在C#中,Invoke是一种利用委托类型对控件进行操作的方法,一般用于在多线程情况下更新控件的界面。 2. 使用方法 Invoke方法是Control类的一个方法,用于对控件进行操作。Invoke方法有两种使用方式,分别是同步方式和异步方式: 2.1 同步方式 在同步方式中,Invoke方法会在当前…

    C# 2023年5月15日
    00
  • C# 使用Log4net添加日志记录的方法

    下面是“C# 使用Log4net添加日志记录的方法”的完整攻略,包含以下内容: Log4net 简介 安装 Log4net 在 C# 中使用 Log4net 记录日志 配置 Log4net 输出日志的方式 示例演示 Log4net 简介 Log4net 是一个功能强大的日志组件,它是Apache的开源日志组件。使用 Log4net 可以在程序中方便地记录日志…

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