C# Socket客户端 多态服务器的有关问题

C# Socket客户端 多态服务器的问题.
需求:
1.利用C# Socket实现一个客户端程序,用来接收多台设备数据,根据数据协议解析出来,将数据添加到数据库.
2.考虑Socket断开重连问题,可能由于设备异常关闭,网络异常或者其他问题导致的接收数据错误以及接收不到的问题.


问题:
1.一个客户端对应多态服务器,用同步还是异步处理?查了资料,同步可能会造成阻塞,如何解决?异步,可能会出现粘包,断包的问题,比如异步处理函数中可能一次过来的有IP地址1或者IP地址2的数据.网上都是一台服务器对应多客户端的例子,实在找不到了.

2.问题2如果利用一个定时器去处理,时不时的对多态服务器进行连接,这样做行不行?


希望各位做过的人多给点意见,谢谢!
------解决思路----------------------
不论是你说的“同步”还是“异步”,出现粘包都是一样的情况。可能你只是看了别人的程序,而恰好有些所谓“同步”的程序是有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都会抛出异常,你这个时候才开始定时“重连接”。而一旦连接成功,那么定时器终止。

当然你可以每隔几分钟随便发送什么不影响业务操作的消息(例如心跳消息),这样判断连接是否正常。
------解决思路----------------------
引用:
不过我还是认为你的需求不合理...

一般来说都是一个服务对应多个设备  设备不同IP 然后连接同一个服务....进行数据收发控制..

是酱紫吧?而且 硬件IP一般都是跟普通电脑一样的 IP不固定 假设硬件重启了 你是如何知道他的IP地址?


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