广告
返回顶部
首页 > 资讯 > 精选 >C#中Socket网络通信类是什么
  • 443
分享到

C#中Socket网络通信类是什么

2023-06-29 17:06:19 443人浏览 八月长安
摘要

这篇文章主要介绍了C#中Socket网络通信类是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。摘要之所以要进行Socket套接字通信库封装,主要是直接使用套接字进行网络通

这篇文章主要介绍了C#Socket网络通信类是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

摘要

之所以要进行Socket套接字通信库封装,主要是直接使用套接字进行网络通信编程相对复杂,特别对于初学者而言。实际上微软从.net 2.0开始已经提供了tcp、UDP通信高级封装类如下:

TcpListenerTcpClientUdpClient

微软从.net 4.0开始提供基于Task任务的异步通信接口。而直接使用socket封装库,很多socket本身的细节没办法自行控制,本文目就是提供一种socket的封装供参考。文中展示部分封装了TCP通信库,UDP封装也可触类旁通:

CusTcpListenerCusTcpClient

代码

using System;using System.Text;using System.Net.Sockets;using System.Net; namespace NetDemo{    // 网络操作相关的类     public class InternetProHelper    {               // 检查设置的端口号是否正确,并返回正确的端口号,无效端口号返回-1             public static int GetNetPort(string NetPort)        {            //声明返回的正确端口号            int resPort = -1;             //检测端口号            try            {                //传入的端口号为空则抛出异常                if (NetPort == "")                {                    throw new Exception("端口号不能为空!");                }                 //检测端口范围                if ((Convert.ToInt32(NetPort) < ushort.MinValue) || (Convert.ToInt32(NetPort) > ushort.MaxValue))                {                    throw new Exception("端口号范围无效!");                }                 //为端口号赋值                resPort = Convert.ToInt32(NetPort);            }            catch (Exception ex)            {                string errMessage = ex.Message;            }            return resPort;        }         public static IPAddress StringToIPAddress(string NetIP)        {            // 将字符串形式的IP地址转换成IPAddress对象            return IPAddress.Parse(NetIP);        }         public static string LocalHostName        {            // 获取本机的计算机名            get            {                return Dns.GetHostName();            }        }         public static string LANIP        {            // 获取本机的局域网IP            get            {                //获取本机的IP列表,IP列表中的第一项是局域网IP,第二项是广域网IP                IPAddress[] IPaddrList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;                 //如果本机IP列表为空,则返回空字符串                if (IPaddrList.Length < 1)                {                    return "";                }                 //返回本机的局域网IP                return IPaddrList[0].ToString();            }        }          public static string GetClientIP(Socket clientSocket)        {            // 获取远程客户机的IP地址            IPEndPoint client = (IPEndPoint)clientSocket.RemoteEndPoint;//客户端的NetSocket对象            return client.Address.ToString();        }         public static IPEndPoint CreateIPEndPoint(string NetIP, int NetPort)        {            // 创建一个IPEndPoint对象            IPAddress ipAddress = StringToIPAddress(NetIP);            return new IPEndPoint(ipAddress, NetPort);        }         public static TcpListener CreateTcpListener()        {            //创建一个自动分配的网络节点            IPAddress ipAddress = IPAddress.Any;            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 0);             return new TcpListener(localEndPoint);        }        public static TcpListener CreateTcpListener(string NetIP, int NetPort)        {            //创建一个网络节点            IPAddress ipAddress = StringToIPAddress(NetIP);            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, NetPort);             return new TcpListener(localEndPoint);        }         public static Socket CreateTcpSocket()        {            // 创建一个基于TCP协议的Socket对象            return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);        }         public static Socket CreateUdpSocket()        {            // 创建一个基于UDP协议的Socket对象            return new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);        }          public static IPEndPoint GetLocalPoint(TcpListener tcpListener)        {            // 获取TcpListener对象的本地终结点            return (IPEndPoint)tcpListener.LocalEndpoint;        }         public static string GetLocalPoint_IP(TcpListener tcpListener)        {            // 获取TcpListener对象的本地终结点的IP地址            IPEndPoint localEndPoint = (IPEndPoint)tcpListener.LocalEndpoint;            return localEndPoint.Address.ToString();        }         public static int GetLocalPoint_Port(TcpListener tcpListener)        {            // 获取TcpListener对象的本地终结点的端口号            IPEndPoint localEndPoint = (IPEndPoint)tcpListener.LocalEndpoint;            return localEndPoint.Port;        }         public static IPEndPoint GetLocalPoint(Socket NetSocket)        {            // 获取Socket对象的本地终结点            return (IPEndPoint)NetSocket.LocalEndPoint;        }         public static string GetLocalPoint_IP(Socket NetSocket)        {            // 获取Socket对象的本地终结点的IP地址            IPEndPoint localEndPoint = (IPEndPoint)NetSocket.LocalEndPoint;            return localEndPoint.Address.ToString();        }         public static int GetLocalPoint_Port(Socket NetSocket)        {            // 获取Socket对象的本地终结点的端口号            IPEndPoint localEndPoint = (IPEndPoint)NetSocket.LocalEndPoint;            return localEndPoint.Port;        }         public static void BindEndPoint(Socket NetSocket, IPEndPoint endPoint)        {            // 绑定终结点            if (!NetSocket.IsBound)            {                NetSocket.Bind(endPoint);            }        }         public static void BindEndPoint(Socket NetSocket, string NetIP, int NetPort)        {            //创建终结点            IPEndPoint endPoint = CreateIPEndPoint(NetIP, NetPort);             //绑定终结点            if (!NetSocket.IsBound)            {                NetSocket.Bind(endPoint);            }        }         public static void StartListen(Socket NetSocket, int NetPort)        {            //创建本地终结点            IPEndPoint localPoint = CreateIPEndPoint(InternetProHelper.LocalHostName, NetPort);             //绑定到本地终结点            BindEndPoint(NetSocket, localPoint);             //开始监听            NetSocket.Listen(200);        }         public static void StartListen(Socket NetSocket, int NetPort, int maxConnection)        {            //创建本地终结点            IPEndPoint localPoint = CreateIPEndPoint(InternetProHelper.LocalHostName, NetPort);             //绑定到本地终结点            BindEndPoint(NetSocket, localPoint);             //开始监听            NetSocket.Listen(maxConnection);        }         public static void StartListen(Socket NetSocket, string NetIP, int NetPort, int maxConnection)        {            //绑定到本地终结点            BindEndPoint(NetSocket, NetIP, NetPort);             //开始监听            NetSocket.Listen(maxConnection);        }         public static bool Connect(Socket NetSocket, string NetIP, int NetPort)        {            // 连接到基于TCP协议的服务器,连接成功返回true,否则返回false            try            {                //连接服务器                NetSocket.Connect(NetIP, NetPort);                 //检测连接状态                return NetSocket.Poll(-1, SelectMode.SelectWrite);            }            catch (SocketException ex)            {                throw new Exception(ex.Message);             }        }         // 以同步方式向指定的Socket对象发送消息        public static void SendMsg(Socket NetSocket, byte[] dataStr)        {            //发送消息            NetSocket.Send(dataStr, dataStr.Length, SocketFlags.None);        }         // 使用UTF8编码格式以同步方式向指定的Socket对象发送消息        public static void SendMsg(Socket NetSocket, string dataStr)        {            //将字符串消息转换成字符数组            byte[] NetBuf = System.Text.Encoding.UTF8.GetBytes(dataStr);             //发送消息            NetSocket.Send(NetBuf, NetBuf.Length, SocketFlags.None);        }         // 以同步方式接收消息        public static void ReceiveMsg(Socket NetSocket, byte[] NetBuf)        {            NetSocket.Receive(NetBuf);        }         // 以同步方式接收消息                public static string ReceiveMsg(Socket NetSocket)        {            //定义接收缓冲区            byte[] NetBuf = new byte[10000];            //接收数据,获取接收到的字节数            int RecvNum = NetSocket.Receive(NetBuf);             //定义临时缓冲区            byte[] DataBuf = new byte[RecvNum];            //将接收到的数据写入临时缓冲区            Buffer.BlockCopy(NetBuf, 0, DataBuf, 0, RecvNum);            //对DataBuf进行处理            return Convert.ToString(DataBuf);        }         // 关闭基于Tcp协议的Socket对象        public static void Close(Socket NetSocket)        {            try            {                //禁止Socket对象接收和发送数据                NetSocket.Shutdown(SocketShutdown.Both);            }            catch (SocketException ex)            {                throw ex;            }            finally            {                //关闭Socket对象                NetSocket.Close();            }        }     }}

感谢你能够认真阅读完这篇文章,希望小编分享的“C#中Socket网络通信类是什么”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: C#中Socket网络通信类是什么

本文链接: https://www.lsjlt.com/news/325914.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中Socket网络通信类是什么
    这篇文章主要介绍了C#中Socket网络通信类是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。摘要之所以要进行Socket套接字通信库封装,主要是直接使用套接字进行网络通...
    99+
    2023-06-29
  • C#基于Socket的网络通信类你了解吗
    目录摘要代码总结摘要 之所以要进行Socket套接字通信库封装,主要是直接使用套接字进行网络通信编程相对复杂,特别对于初学者而言。实际上微软从.net 2.0开始已经提供了TCP、U...
    99+
    2022-11-13
  • C#基于Socket套接字的网络通信封装
    本文为大家分享了C#基于Socket套接字的网络通信封装代码,供大家参考,具体内容如下 摘要 之所以要进行Socket套接字通信库封装,主要是直接使用套接字进行网络通信编程相对复杂,...
    99+
    2022-11-12
  • C++ socket网络编程方法是什么
    本篇内容主要讲解“C++ socket网络编程方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ socket网络编程方法是什么”吧!功能完成Cpp客户端简单功能,可收发数据。源码#...
    99+
    2023-06-25
  • Java socket通信与C++之间的关系是什么
    Java socket通信与C++之间的关系是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。c++builer与Java socket通信是我们在编程中经常用到的,有不少的...
    99+
    2023-06-17
  • android网络通信机制是什么
    Android网络通信机制是指Android系统中用于实现网络通信功能的一系列机制和API。Android系统提供了多种网络通信方式...
    99+
    2023-08-26
    android
  • Python中Socket通信的原理是什么
    本篇文章给大家分享的是有关Python中Socket通信的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python是什么意思Python是一种跨平台的、具有解释性、...
    99+
    2023-06-14
  • Java中socket通信的原理是什么
    Java中socket通信的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java.net.Socket继承于java.lang.Object,有八个...
    99+
    2023-06-17
  • C#如何实现基于Socket套接字的网络通信封装
    小编给大家分享一下C#如何实现基于Socket套接字的网络通信封装,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!摘要之所以要进行Socket套接字通信库封装,主要...
    99+
    2023-06-21
  • Java NIO Socket通信的方法是什么
    这篇文章主要讲解了“Java NIO Socket通信的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java NIO Socket通信的方法是什么”吧!服务器代码:import&...
    99+
    2023-06-17
  • C#中如何处理网络通信问题
    C#中如何处理网络通信问题,需要具体代码示例网络通信在现代编程中是一项非常重要的技术。无论是开发网络应用程序、网络游戏还是进行远程数据交互,我们都需要了解如何在C#中处理网络通信问题。本文将介绍C#中处理网络通信的一些常见方式,并提供相应的...
    99+
    2023-10-22
    网络通信 问题解决 C#处理
  • 计算机网络通信的原理是什么
    本篇内容介绍了“计算机网络通信的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!成为"黑客"前,必须学习的&qu...
    99+
    2023-06-03
  • 高性能跨平台网络通信框架 HP-Socket 5.6.1怎么更新
    今天就跟大家聊聊有关高性能跨平台网络通信框架 HP-Socket 5.6.1怎么更新,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。v5.6.1 更新一、SSL 组件更新所有 SSL ...
    99+
    2023-06-03
  • C# Socket服务的效能是通过什么来衡量的
    这篇文章主要介绍“C# Socket服务的效能是通过什么来衡量的”,在日常操作中,相信很多人在C# Socket服务的效能是通过什么来衡量的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# Socket服务...
    99+
    2023-06-17
  • WCF通道网络传输技术是什么
    这篇文章主要介绍“WCF通道网络传输技术是什么”,在日常操作中,相信很多人在WCF通道网络传输技术是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”WCF通道网络传输技术是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • 互联网中通信协议三要素是什么
    这篇文章给大家分享的是有关互联网中通信协议三要素是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通信协议三要素:1、通信接口标准,是通信的硬件协议,提供机械的硬件的、电气的、功能性的特性和规程;2、通信格式,...
    99+
    2023-06-14
  • 计算机网络中C类地址的子网掩码是哪个
    这篇文章给大家分享的是有关计算机网络中C类地址的子网掩码是哪个的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C类地址的子网掩码是【255.255.255.0】。子网掩码也是由32位的二进制数组成,它定义了lP地址...
    99+
    2023-06-15
  • 怎么在c# 中对网络信息进行设置
    怎么在c# 中对网络信息进行设置?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。(1).IP地址  /// <summary> ...
    99+
    2023-06-14
  • C#中常见的网络通信和安全性问题及解决方法
    C#中常见的网络通信和安全性问题及解决方法在当今互联网时代,网络通信已经成为了软件开发中必不可少的一部分。在C#中,我们通常会遇到一些网络通信的问题,例如数据传输的安全性、网络连接的稳定性等。本文将针对C#中常见的网络通信和安全性问题进行详...
    99+
    2023-10-22
    Http 加密 socket 网络通信:TCP/IP 安全性问题:身份验证
  • Oracle GoldenGate进程中怎么配置Manager和网络通信
    本篇内容介绍了“Oracle GoldenGate进程中怎么配置Manager和网络通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作