日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#以太網Sockets服務器設計實現_C#教程

作者:cfqq1989 ? 更新時間: 2023-04-08 編程語言

【1】引用命名空間:

//System.Net.Sockets
using System.Net.Sockets; // 以太網對象
?
// 字段位置
private Socket socket業務; ?//對象既可以當服務器,又可以當客戶端
TcpListener tcpListener; ? //服務器對象
TcpClient tcpClient; ? ? ? //客戶端對象

?Socket 構造函數:

public Socket(SocketInformation 套接字結構體);
public Socket(SocketType 插座類型, ProtocolType 協議類型);
public Socket(AddressFamily 工作組, SocketType 插座類型, ProtocolType 協議類型);

參數介紹:

AddressFamily.InterNetwork=2    用 IPv4
 public enum AddressFamily
        {
            Unknown = -1,       //未知的地址族。
            Unspecified = 0,    //未指定的地址族。
            Unix = 1,           //Unix 本地到主機地址。
            InterNetwork = 2,   //IP 版本 4 的地址。
            ImpLink = 3,        //ARPANET IMP 地址。
            Pup = 4,            //PUP 協議的地址。
            Chaos = 5,          //MIT CHAOS 協議的地址。
            NS = 6,             //IPX 或 SPX 地址。
            Ipx = 6,            //Xerox NS 協議的地址。
            Iso = 7,            //ISO 協議的地址。
            Osi = 7,            //OSI 協議的地址。
            Ecma = 8,           //歐洲計算機制造商協會 (ECMA) 地址。
            DataKit = 9,        //Datakit 協議的地址。
            Ccitt = 10,         //CCITT 協議(如 X.25)的地址。
            Sna = 11,           //IBM SNA 地址。
            DecNet = 12,        //DECnet 地址。
            DataLink = 13,      //直接數據鏈接接口地址。
            Lat = 14,           //LAT 地址。
            HyperChannel = 0xF, //NSC Hyperchannel 地址。
            AppleTalk = 0x10,   //AppleTalk 地址。蘋果
            NetBios = 17,       //NetBios 地址。
            VoiceView = 18,     //VoiceView 地址。
            FireFox = 19,       //FireFox 地址。
            Banyan = 21,        //Banyan 地址。
            Atm = 22,           //本機 ATM 服務地址。
            InterNetworkV6 = 23,//IP 版本 6 的地址。
            Cluster = 24,       //Microsoft 群集產品的地址。
            Ieee12844 = 25,     //IEEE 1284.4 工作組地址。
            Irda = 26,          //IrDA 地址。
            NetworkDesigners = 28,//支持網絡設計器 OSI 網關的協議的地址。
            Max = 29            //MAX 地址。
        }

?SocketType.Stream

public enum SocketType
    {
        Stream = 1,// Tcp  InterNetwork 地址族 //支持可靠、雙向
        Dgram = 2, // Udp  InterNetwork 地址族。
        Raw = 3,
        Rdm = 4,
        Seqpacket = 5,
        Unknown = -1//指定未知的 Socket 類型。
    }

ProtocolType.Tcp

public enum ProtocolType
    {
        IP = 0,
        IPv6HopByHopOptions = 0,
        Icmp = 1,
        Igmp = 2,
        Ggp = 3,
        IPv4 = 4,
        Tcp = 6,
        Pup = 12,
        Udp = 17,
        Idp = 22,
        IPv6 = 41,
        IPv6RoutingHeader = 43,
        IPv6FragmentHeader = 44,
        IPSecEncapsulatingSecurityPayload = 50,
        IPSecAuthenticationHeader = 51,
        IcmpV6 = 58,
        IPv6NoNextHeader = 59,
        IPv6DestinationOptions = 60,
        ND = 77,
        Raw = 0xFF,
        Unspecified = 0,
        Ipx = 1000,
        Spx = 1256,
        SpxII = 1257,
        Unknown = -1
    }

【2】字段: 聲明對象

//聲明一個Socket對象
private Socket socketSever服務器; // 【1】Socket
 
// 工作組,套接字類型,協議類型
socketSever服務器 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

【3】初始化:參數

//設置 服務器ip
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.0.7"), int.Parse(12345));
            try
            {
                socketSever服務器.Bind(ipe);// 【2】Bind 綁定本地ip
            }
            catch (Exception ex)
            {
                //寫入日志
               MessageBox.Show("服務器開啟失敗:"+ex.Message);
                return;
            }
// 調用listen()函數監聽,業務窗口(同時辦理業務窗口數)// 同時占線數量
socketSever服務器.Listen(10);// 【3】Listen
 
Task.Run(new Action(() => //開線程,使主線程能退到ui層
         {
             客戶登錄業務(); // 【4】Accpet
         }));
 
按鈕_啟動服務.Enabled = false;
private void 客戶登錄業務()
        {
            while (true)
            {
                //等待客戶
                Socket socketClient客戶 = socketSever服務器.Accept();// 【4】Accpet
 
 
                //客戶來了
                string client客戶IP地址 = socketClient客戶.RemoteEndPoint.ToString();
 
                客戶電話簿.Add(client客戶IP地址, socketClient客戶);
 
                占線刷新(client客戶IP地址, true);
 
                Task.Run(new Action(() => //第2隊線程
                {
                   Receive客戶經理(socketClient客戶);
                }));
            }
        }
private void Receive客戶經理(Socket socketClient)
        {
            while (true)
            {
                // 創建一個緩沖區
                byte[] buffer = new byte[1024 * 1024 * 10];
                int length = -1;
 
                // 客戶ip
                string client = socketClient.RemoteEndPoint.ToString();
 
 
                // 等待客戶發言
                try
                {
                    length = socketClient.Receive(buffer);
                }
                catch (Exception)
                {
                  // 下線了
                    占線刷新(client, false);
                    客戶電話簿.Remove(client);
                    break;
                }
 
                if (length > 0)
                {// 委托呼叫
                   wt(client,Encoding.UFT8.GetString(buffer,0,length));
                     
                }
                else
                {
                 // 下線了
                    占線刷新(client, false);
                    客戶電話簿.Remove(client);
                    break;
                }
            }
        }

使用以太網

注意:對象不包含0個參數

原文鏈接:https://blog.csdn.net/cfqq1989/article/details/121724912

欄目分類
最近更新