欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 交换机控制软件的实现步骤猜测

交换机控制软件的实现步骤猜测

2025/3/17 16:12:20 来源:https://blog.csdn.net/2401_89847635/article/details/146300131  浏览:    关键词:交换机控制软件的实现步骤猜测

一、主要目的

    提出对交换机软件控制逻辑的猜测。

 

二、交换机控制软件的组成

  (一)背景

      1、交换机有很多的RJ45水晶头端口。

      2、每个端口支持同时发送和接收字节数据。

      3、每个端口接收的数据需要查表后才能转发给目标端口。

 

  (二)端口状态扫描线程

        负责扫描每个端口的状态,如果连接了双绞线,就开启对应的发送线程,接收线程;如果断开连接,就通知线程关闭。

 

  主要逻辑:

// 循环每个端口

for(int k = 0; k < len; k++){

     // 如果端口是建立了连接,并且没有启动接收和发送线程

      if(ports[k]是连通的  &&  ports[k]没有启动收发线程){

           // 启动对应端口的发送线程

           start_send_thread(ports[k]);

 

           // 启动对应端口的接收线程     

           start_recv_thread(ports[k]);

 

       } else if(ports[k]是断开的  &&  ports[k]启动了收发线程){

            // 停止对应端口的发送线程

           stop_send_thread(ports[k]);

 

           // 停止对应端口的接收线程     

           stop_recv_thread(ports[k]);

        }

}

 

  (三)每个端口的接收线程

        接收端口的数据包,获得目标RJ45端口号,发给目标端口号的数据发送队列里。

while(退出为假){

      // 阻塞接收当前端口的字节数据

 

      // 获取数据包中的目标MAC地址

 

      // 通过查表,获取对应的水晶头端口号

      if(端口号存在){

           // 获得目标端口对应的发送线程的队列

 

          // 把数据包入队到目标端口发送线程的发送队列里

       } else {

           // 丢弃该数据包

       }

}

 

  (四)每个端口的发送线程

        从发送队列里出队数据包,发给和端口相连的设备。

while(退出为假){

      // 阻塞出队一个数据包

      Data data = queue.deQueue();

 

     // 通过双绞线发给相连的设备(另一台交换机、路由器、电脑主机)

     pin.send(data);

}

     

 

三、总结

    1、全双工通信需要占用2根线路(发送和接收各自一根),需要开启两个线程。

 

    2、多个线程执行同一个方法的时候要添加排他锁。

 

    3、发现通信状态发生改变,只能是不断定时循环判断。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词