检查插座是否在紧凑的框架中连接

时间:2012-12-12 17:08:14

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

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

然后我在CE 6.0上运行了一个运行在紧凑框架3.5上的客户端软件......这个客户端需要:

  • 启用服务时连接到服务器
  • 每300毫秒发送几个字节的数据
  • 发送时不要挂起或每次连接丢失时间
  • 检查插座是否已连接

到目前为止,我使用基于此示例的异步代码实现了服务器端,但进行了修改以保持连接处于活动状态,直到服务器关闭它们...不仅仅是一次拍摄而且它完全正常工作

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

这也很完美。我需要什么?

  1. 在发送数据之前检测与套接字的连接是否已打开...这样可以避免在出现问题时丢失时间
  2. 我在网上搜索但是我无法在CF中做到这一点...而且.connected方法在这里不可用。

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

1 个答案:

答案 0 :(得分:0)

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