tongtong9680 2014-05-06 08:51 采纳率: 0%
浏览 897

设备连接服务器,从代码上看是同时产生连个socket进行通信吗?有何影响?

设备连接服务器端有两个端口,是同时建立socket通信吗?两个socket连接同时产生吗?如果其中一个端口发生阻塞,设备与服务器连接就全部发生再另外一个socket连接上吗?

代码如下:

CheckServerConnect(Global.Hitems1stIP, Global.Hitems1stPort, lblHiTems1stStatus);
CheckServerConnect(Global.Hitems2ndIP, Global.Hitems2ndPort, lblHiTems2ndStatus);

#endregion

    #region CheckServerConnect

    private void CheckServerConnect(string ip, int port, Label lbl)
    {
        Thread thread = new Thread(new ThreadStart(delegate() { DoCheck(ip, port, lbl); }));
        thread.Start();
    }

    private void DoCheck(string ip, int port, Label lbl)
    {
        IPEndPoint ipep = null;
        Socket socket = null;

        try
        {
            ipep = new IPEndPoint(IPAddress.Parse(ip), port);
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ipep);

            SetLabel(lbl, Color.Blue, "Connected");
        }
        catch //(Exception e)
        {
            SetLabel(lbl, Color.Red, "Disconnected");
        }
        finally
        {
            if (ipep != null) { ipep = null; }
            if (socket != null) { socket.Close(); socket = null; }
        }
    }

    delegate void SetLabelInvoker(Label lbl, Color backColor, string message);
    private void SetLabel(Label lbl, Color backColor, string message)
    {
        try
        {
            if (lbl.InvokeRequired)
            {
                lbl.BeginInvoke(new SetLabelInvoker(SetLabel), lbl, backColor, message);
                return;
            }
            lbl.BackColor = backColor;
            lbl.Text = message;
        }
        catch { }
    }

    #endregion
  • 写回答

1条回答 默认 最新

  • 神秘泣男子 2024-03-12 23:08
    关注

    如果设备与服务器之间使用两个独立的端口进行通信,通常情况下是两个独立的Socket连接。每个端口都有一个独立的Socket连接,它们之间是相互独立的。

    如果其中一个端口上的连接发生阻塞,不会影响另一个端口上的连接。每个Socket连接都是独立的,因此阻塞或其他问题只会影响与特定端口相关联的连接。

    例如,如果你有两个端口分别为PortA和PortB,设备通过SocketA连接到PortA,通过SocketB连接到PortB。如果SocketA的连接发生阻塞,SocketB的连接不会受到影响,它可以继续正常运行。

    如果你的应用程序使用两个独立的Socket对象,可能会导致以下一些影响:

    1. 复杂性增加: 管理两个独立的Socket连接会增加代码的复杂性。你需要处理两个Socket的连接、关闭、错误处理等情况,而且需要确保在正确的时机发送和接收数据。

    2. 资源占用: 每个Socket连接都需要一定的系统资源。如果同时使用多个Socket,可能会占用更多的资源,尤其在连接数较多的情况下。

    3. 并发性: 使用单一Socket对象可能更容易处理并发性,因为你可以使用异步操作或多线程来处理同时发生的多个事件,而不必担心管理多个独立的Socket对象。

    4. 设计考虑: 一般情况下,设计上更推荐使用一个Socket对象处理一个连接。如果有多个并发连接,可以考虑使用多线程、异步编程或者基于事件的模型,而不是简单地创建多个独立的Socket对象。

    总体而言,使用一个Socket对象管理设备和服务器之间的连接通常更为简便,更容易维护和调试。然而,确切的实现方式取决于你的应用程序需求和设计考虑。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题