您好,登錄后才能下訂單哦!
這篇文章主要介紹了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網絡通信類是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。