直接運行服務沒問題,放到NT服務里就不響應TCP連接,請問有沒有哪位知道為什么


編寫了一個服務程序,是通過TCP建立連接的,程序的可執行文件.exe直接運行,和在編譯器下面以服務的形式調試都沒問題(嘗試過多種方法,包括用ACE的服務框架NT_Service等)。可是如果單獨以服務的形式運行,就不響應客戶端發送過來的TCP連接了。抓包之后發現,只能抓到用戶發來的 TCP [SYN] 這種包,正常情況下,服務器收到這個包應該會相應一個ack的才對,不知道為什么一放到服務里運行就不響應了,而程序單獨執行就可以。請指教,謝謝!!!

12 个解决方案

#1


沒人有人知道么,還是我沒有描述明白呢?

#2


確定在任務管理器里可以看到你的服務進程。
另外,用DebugView 或是寫日志。

#3


樓上明顯是老鳥!

#4


to weiym 
====================
任務管理里可以看到服務進程,你說的寫日志是指我服務的日志么?如果是的話,我的服務是有日志的,日志表明我的程序就一直在監聽我要收包的tcp端口。而沒有收到任何tcp請求

DebugView我不知道指的是什么,不過我的程序在用編譯器Debug模式下運行是沒問題的(也是以服務模式調試,不是單純的執行程序),只是一放到服務里啟動就不響應tcp連接。

很頭痛!!

#5


1. 查看你運行的機器是否已經有應用程序占用了你的TCP 端口。
2. 在DOS,用netstat -an 查看你的端口是否正在監聽中。

#6


to gzlucky 

====================
檢查過了,端口被起來了,是lintening狀態。
不管是編譯器調試,還是用真正NT服務起動,都能顯示出監聽我要的端口。

就是服務起的時候,發給該端口的tcp連接,無相應,就和沒起一樣

#7


to   gzlucky   

==================== 

不好意思,剛才沒太看仔細。並無其他程序占用我要使用的端口

#8


你看看你程序有什么特殊,比如說會不會被阻塞(如彈出窗口)。

#9


程序是一個windowsNT環境內下的服務程序,並無什么界面。簡單點說就是監聽一個tcp端口,然后接收到客戶端法來的包再做處理。
如果說程序被什么阻塞了的話,那在編譯器下運行時應該也是會被阻塞的我感覺。因為我做了各種形式的測試,不管什么條件下,只要是在編譯器的調試模式下起動服務,都沒問題。只要在服務列表中起服務,就不響應tcp連接了。就好象端口沒被監聽一樣,但用netstat是可以看到端口已經是listening 狀態


#10


請問 用DebugView 是怎么做?

#11


沒有人能再給點意見么?

#12


感覺就是端口沒通,如果不是被別的應用程序占了,就是你服務程序端口被防火牆阻擋了。把你用的端口在防火牆上放開

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com