Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务持续监视TCP端口上的网络服务器_C#_Service_Tcp_Tcpclient_Tcplistener - Fatal编程技术网

C# Windows服务持续监视TCP端口上的网络服务器

C# Windows服务持续监视TCP端口上的网络服务器,c#,service,tcp,tcpclient,tcplistener,C#,Service,Tcp,Tcpclient,Tcplistener,这是我第一次涉足socket编程。我需要一些帮助才能开始。基本上,我有一个服务器,在特定的TCP端口上发送状态更新。我需要一台客户端计算机来查找这些更新消息。我决定用C语言创建一个Windows服务,它将安装在客户端计算机上。我不知道服务应该是TCP侦听器服务器还是客户端。任何指导都将不胜感激。找到了答案。这句话让我很反感: // Note, for this client to work you need to have a TcpServer // connected to the same

这是我第一次涉足socket编程。我需要一些帮助才能开始。基本上,我有一个服务器,在特定的TCP端口上发送状态更新。我需要一台客户端计算机来查找这些更新消息。我决定用C语言创建一个Windows服务,它将安装在客户端计算机上。我不知道服务应该是TCP侦听器服务器还是客户端。任何指导都将不胜感激。

找到了答案。这句话让我很反感:

// Note, for this client to work you need to have a TcpServer
// connected to the same address as specified by the server, port
// combination.

由于您已经有了一个将发送更新的服务器,所以您需要做的就是在主机上创建一个TCP客户端来接收这些更新。这将用作侦听器,只需将其连接到相应服务器的IP和端口。或者,如果您已经有了一个连接到服务器的客户端,并且只想拦截流量,那么可以使用tcpdump之类的工具。

我创建了一个服务,该服务可以启动一个线程,该线程几乎每10秒使用无限循环侦听一次连接。我担心线程睡眠10秒,我可能会错过一些通信。我可以降低时间间隔,但是有没有一种方法可以在不睡觉的情况下持续监视连接?不确定为什么希望线程每10秒睡眠并侦听一次。您只需继续拨打recv即可。如果没有可读取的数据,接收方法将阻塞,直到数据可用。摘自dotnetapi文档。您只需调用recv并等待数据。或者,如果要创建某种基于线程的侦听连接,可以在Windows中使用unix select的任何替代方案。但我也不认为有任何必要使用itJavev——我已经实现了server.receive方法,不知道它被阻塞了。我在worker循环中使用if StopRequest.WaitOne0检查服务是否已停止,以便关闭服务器连接和所有连接。我的代码已经阻塞了,是否需要WaitOne?假设C的实现严格遵循Berkeley的socket API,则不需要等待。根据您的实现,您可能会遇到的唯一问题是,如果当前线程处于阻塞状态,您希望终止该进程。