【发布时间】:2012-11-30 11:06:47
【问题描述】:
我有一个在 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
这也是完美的工作。我需要什么?
- 在发送数据之前检测与套接字的连接是否打开...这样可以避免在出现问题时浪费时间
我在网上搜索过,但我无法在 CF 中执行此操作...而且 .connected 方法在此处不可用。
最好的——但对我来说似乎很愚蠢——我发现的方法是在连接/发送成功时设置一个标志,并在出现问题时重置它。
【问题讨论】:
-
仅供参考,NetworkStream 不会缓存写入,因此 Flush 不会为您做任何事情。详情见这里:msdn.microsoft.com/en-us/library/…
标签: .net vb.net sockets compact-framework tcpclient