解决方案 »

  1.   

    异步,你到网上下载一个demo,去研究一下
      

  2.   

    需求很奇怪.. 话说你说话的语气以及问题.似乎在论坛有几个人都类似..而且你这是小号啊....你是不是申请了好多小号来论坛问问题?? 大号没分了??一般来说 做数据采集这东西 你写的东西 是服务.硬件设备是客户端...不过不知道为啥你的反过来了...那也罢了..无非就是多个tcp_client而已...装在集合中 分别设置他们的beginreceived就行了...不过我还是认为你的需求不合理...一般来说都是一个服务对应多个设备  设备不同IP 然后连接同一个服务....进行数据收发控制..是酱紫吧?而且 硬件IP一般都是跟普通电脑一样的 IP不固定 假设硬件重启了 你是如何知道他的IP地址?你不知道如何进行连接?想想思路是不是这样的.
      

  3.   

    不同意3楼的说法
    既然是要跟硬件设备通信,必然是要设置成固定IP,而不是DHCP协议动态分配,否则重启之后还怎么去找对应的设备
    硬件设备又不是客户机,有人操作
      

  4.   

    不论是你说的“同步”还是“异步”,出现粘包都是一样的情况。可能你只是看了别人的程序,而恰好有些所谓“同步”的程序是有bug的(没有处理粘包的),所以你才会以为同步不沾包。同步处理和异步处理,在处理命令解析上是一样的,区别只是异步代码更简洁一些,但是稍微需要一点理解里(因为毕竟写成分离的“委托回调形式”了)。对于客户端而言,它访问每一个服务器都是使用一个独立的 TcpClient。也就是是说,如果你访问200个设备,那么你就有两百个TcpClient。例如你可以包装一个独立的类来实现设备网关:public class 设备
    {
        public string 设备编号;
        public TcpClient Tcp;
        public syte[] Buffer;
        public NetworkStream Stream;
        .......
        public event Action<MyCommand> CmdReceived;
        .......
        public void Connect()
        {
               初始化 Tcp;
               初始化 Stream;
          初始化BeginRead;
        }
    }
    然后如果有200个设备,就 new 200个设备对象进行单独的处理就行了。当连接断掉的时候,不论是 BeginSend、EndSend 还是 BeginRead、EndRead都会抛出异常,你这个时候才开始定时“重连接”。而一旦连接成功,那么定时器终止。当然你可以每隔几分钟随便发送什么不影响业务操作的消息(例如心跳消息),这样判断连接是否正常。
      

  5.   


    这要看是哪一种“设备”。许多设备跟 PC 不一样。设备不支持 DHCP 客户协议,而是采用 dip 拨动开关来设置固定的局域网 IP。
      

  6.   

    具体是哪一种连网方式,还是需要根据你的设备而具体分析。有些专门的“设备服务器”为每一个设备先增加一个模块(来代理原有的通讯功能),然后它自己的服务器负责管理与所有的通讯模块,然后你的上位机跟这一个设备服务器通讯就可以了。假设你得设备会做为客户端来智能地访问上位机、设备自己能够自动重连,那么你的上位机就是服务,你仍然是“一个服务器对应多个客户端”的情况。不过此时也还是一样,你 Accept 到连接时也还是有不同的对方 IP 的(Accpet之后也还是要把不同的 TcpClient 分别保存起来),“同步、异步”一样也还是要处理粘包的。因此:
    1. 不论是同步还是异步,都必须处理粘包。
    2. 不论是你的上位机作为客户机还是服务器,你收发数据之前都肯定创建不同的 TcpClient 对象来对应不同的设备。
      

  7.   


    我知道 现在的板子都支持客户端模式以及服务端模式..但是提及到"控制" 大家可能想到所谓现在流行的智能家居.远程控制的话 肯定是要联网,那么他一定就是client.也就是通过wifi连接服务器tcp_client模式进行数据收发.属于他如果是服务器模式,只是用于联网控制, 比如 设备重启发射ap.然后连接ap使手机跟设备同一网段.手机属于client 设备是server 你通过tcp或者udp(看设备类型)把可联网ap的名字以及密码发给设备,设备就可以上网了.然后这个时候 设备又从server模式=>client模式..然后正常...我用过几款板子都是差不多这样...所以 我个人觉得LZ的东西还是有一些问题的..而且,最终你的设备是扔在哪?内网操作吗?
      

  8.   

    硬件不一定是终端,可能是个PLC,也可能是其他硬件设备
    既然强调硬件设备,它里面大概是不能自己编程写通讯软件的,通讯是通过通信板
      

  9.   

    GPS设备,智能仪表,以太网打印机,这些都可以归结为硬件设备,不能软件编程