亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Socket網絡通信類是什么

發布時間:2022-03-29 13:44:46 來源:億速云 閱讀:242 作者:小新 欄目:開發技術

這篇文章主要介紹了C#中Socket網絡通信類是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

摘要

之所以要進行Socket套接字通信庫封裝,主要是直接使用套接字進行網絡通信編程相對復雜,特別對于初學者而言。實際上微軟從.net 2.0開始已經提供了TCP、UDP通信高級封裝類如下:

TcpListener
TcpClient
UdpClient

微軟從.net 4.0開始提供基于Task任務的異步通信接口。而直接使用socket封裝庫,很多socket本身的細節沒辦法自行控制,本文目就是提供一種socket的封裝供參考。文中展示部分封裝了TCP通信庫,UDP封裝也可觸類旁通:

CusTcpListener
CusTcpClient

代碼

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網絡通信類是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平舆县| 华亭县| 皋兰县| 新巴尔虎右旗| 桐城市| 池州市| 南和县| 汕尾市| 新宾| 微山县| 濮阳县| 贵州省| 武清区| 浑源县| 洮南市| 吴川市| 内乡县| 郯城县| 淮滨县| 义乌市| 辽阳市| 饶阳县| 嘉义市| 喜德县| 宜昌市| 昔阳县| 都江堰市| 富顺县| 阳高县| 江油市| 乌拉特中旗| 贵德县| 蒙城县| 万州区| 多伦县| 汕头市| 西乌珠穆沁旗| 贵南县| 乌审旗| 进贤县| 湖南省|