C#以太网Sockets服务器设计实现

 更新时间:2023年02月06日 14:21:40   作者:cfqq1989  
本文主要介绍了C#以太网Sockets服务器设计实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

【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个参数

到此这篇关于C#以太网Sockets服务器设计实现的文章就介绍到这了,更多相关C#以太网Sockets服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • c#之关闭窗体的实现方法

    c#之关闭窗体的实现方法

    这篇文章主要介绍了c#之关闭窗体的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 简单介绍三层架构工作原理

    简单介绍三层架构工作原理

    这篇文章介绍了三层架构的工作原理,二层与三层架构的区别,三层架构的优劣势。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C# 6.0 的知识梳理

    C# 6.0 的知识梳理

    目前最新的版本是C# 7.0,VS的最新版本为Visual Studio 2017 RC,两者都尚未进入正式阶段。C# 6.0虽说出了一段时间,但是似乎有许多人对这一块知识并不了解。本文将对C# 6.0的知识进行梳理,下面跟着小编一起来看下吧
    2016-12-12
  • C#判断系统是32位还是64位的方法

    C#判断系统是32位还是64位的方法

    这篇文章主要介绍了C#判断系统是32位还是64位的方法,实例分析了两种常用的技巧供大家选择使用,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 使用C#实现一个PPT遥控器

    使用C#实现一个PPT遥控器

    由于本人需要参加的讨论会比较多,每次都会涉及到PPT,有时候坐在电脑旁讲会比较不生动,前人就发明了PPT遥控器,今天就给大家介绍下基于C#实现ppt遥控器,感兴趣的朋友一起看看吧
    2021-05-05
  • Unity Shader模拟玻璃效果

    Unity Shader模拟玻璃效果

    这篇文章主要为大家详细介绍了Unity Shader模拟玻璃效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C#实现更改MDI窗体背景颜色的方法

    C#实现更改MDI窗体背景颜色的方法

    这篇文章主要介绍了C#实现更改MDI窗体背景颜色的方法,涉及C#窗体背景色的设置技巧,非常简单实用,需要的朋友可以参考下
    2015-08-08
  • C#读取数据库返回泛型集合详解(DataSetToList)

    C#读取数据库返回泛型集合详解(DataSetToList)

    本篇文章主要是对C#读取数据库返回泛型集合(DataSetToList)进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • c#数据库与TXT导入导出的实例

    c#数据库与TXT导入导出的实例

    最近刚学完ADO.NET,做了个数据导入导出的题目,是将txt中的数据导入数据库,然后将数据库中的数据导出到txt中,这里说的数据的格式是“tom|23”,tom指名字,23指年龄。废话也不多说了,大家直接看代码。
    2013-04-04
  • c# 如何将RadioButton与DataTable数据进行绑定

    c# 如何将RadioButton与DataTable数据进行绑定

    我接触到的有将两个控件的数据绑定、将控件的属性与DataTable绑定,以下说说在将DataTable与RadioButton绑定的过程中出现的问题
    2012-11-11

最新评论