.net - 检查套接字是否在紧凑框架中连接

标签 .net vb.net sockets compact-framework tcpclient

我有一个在 Windows 桌面上运行并在 .net 中开发的服务器软件,它始终通过 TCP/IP 监听套接字上的传入连接。

然后我有一个运行在 CE 6.0 上的客户端软件,使用紧凑框架 3.5 开发......这个客户端需要:

  • 启用服务时连接服务器
  • 每 300 毫秒发送几个字节的数据
  • 发送时永远不会挂起或每次都失去连接时间
  • 检查socket是否连接

  • 到目前为止,我使用基于此示例的异步代码实现了服务器端,但经过修改以保持连接处于事件状态,直到服务器关闭它们......不仅是一次拍摄而且它完美地工作

    http://msdn.microsoft.com/en-us/library/fx6588te.aspx

    然后我以这种方式实现了客户端:
    dim clientSocket as new System.Net.Sockets.TcpClient()
    
    /... code .../
    
    'Activate the service
    clientSocket.Connect("10.0.0.34", myPort)
    
    / .... code ..../ 
    
    'Data send function
    dim serverStream as NetworkStream = clientSocket.GetStream()
    dim outStream as byte() = System.Text.Enconding.ASCII.GetBytes("My messagge...")
    serverStream.Write(outStream, 0, outStream.Length)
    serverStream.Flush
    

    这也是完美的工作。我需要什么?
  • 在发送数据之前检测与套接字的连接是否打开...这将避免在出现问题时浪费时间

  • 我在网上搜索,但我无法在 CF 中进行搜索……而且 .connected 方法在此处不可用。

    最好的——但对我来说似乎很愚蠢——我发现的方法是在连接/发送成功时设置一个标志,并在出现问题时重置它。

    最佳答案

    我曾经尝试轮询我的套接字以确定它们是否仍然连接。但是根据我的经验,确定套接字是否已经关闭的唯一可靠的、与设备无关的方法是发送操作成功或超时。 (注意:您可能想自己检查超时。如果我记得清楚的话,标准 TCP 套接字会在 20 秒后超时,但在此之前我见过一些非标准的套接字,只是不想超时几分钟。)如果您很幸运,那么您在通过套接字实现的协议(protocol)中有“ping”机制,因此您可以不时在网络上运行一些无意义的数据,以查看您是否仍然有连接。我知道,它会产生相当大的开销,但如果你真的需要知道,这是绝对适用于所有设备的唯一方法。

    关于.net - 检查套接字是否在紧凑框架中连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844941/

    相关文章:

    c# - 具有 Xml 反序列化的 WCF DataContract 中的命名空间

    .net - 使用委托(delegate)和声明事件

    c# - 是否有像哈希表这样的 3 个链接值的预定义类?

    .net - ImmutableObject 属性有什么好处?

    javascript - 在套接字客户端和服务器中访问时,socket.io-stream 也面临 404 问题

    c# - 异步写入套接字线程安全吗?

    c# - Entity Framework 核心 : Fail to update Entity with nested value objects

    mysql - 如何从表mysql获取特定单元格到Vb.net

    c - Linux C 套接字 - 绑定(bind)套接字从另一个接口(interface)接收数据包?

    c# - 将列表从 jQuery 传递到服务