如何监听已被另一个应用程序监听的TCP端口

时间:2011-05-19 13:09:20

标签: c# asp.net vb.net networking network-programming

我有一个总是监听端口6002的插件,我有一个ASP.net应用程序,它将消息发送到同一个端口并从同一端口上的插件接收回复, 发送工作正常,插件在同一端口发送回复,但我不知道如何捕获此回复,当我尝试使用Tcplistener侦听同一端口时,start方法抛出此异常:仅通常允许使用每个套接字地址(协议/网络地址/端口),

有没有办法捕获收到的消息 感谢

4 个答案:

答案 0 :(得分:3)

听起来你错误地认为从Socket获得的TcpListener.AcceptSocket只能在一个方向上使用。

套接字实际上可以是双向的。您可以使用Send发送内容,Receive发送收听获取回复。打开一个插槽,然后将其用于发送和接收。

答案 1 :(得分:1)

简而言之,没有。

一旦打开端口,如果进一步尝试使用来自不同来源的相同端口,则会抛出异常 - 正如您现在所经历的那样。没有办法解决这个问题。

答案 2 :(得分:1)

我用这种方式解决了这个问题,我知道这是旧方法,但它正在工作! :

'/*Variables Initialization*/
dim objSocket, strServicePort, strIpAddr, strResult, strMsgTo, strMsgResponse   
strServicePort = "6002"
strIpAddr = "127.0.0.1"

'/* Create a TCP/IP socket. */
objSocket = Server.CreateObject("Intrafoundation.TCPClient.3")
objSocket.ClearLog()

'/* Establish socket connection. */
objSocket.Open (strIpAddr,strServicePort)
objSocket.Timeout=60.0 
strMsgTo ="---- Message here ----"

'/* Send request message to plugin  */

objSocket.SendRN(strMsgTo) 

'/* receive XML Request Message from plugin  */
strMsgResponse = objSocket.Recv()
strMsgResponse = Replace(strMsgResponse, vbLf, "")

objSocket.Close()

答案 3 :(得分:0)

如果要检查流量,可以使用winpcap。
编辑:我认为你没有问正确的问题。在这种情况下,插件是服务器(侦听端口6002),您的ASP.net应用程序是侦听某个任意端口的客户端。您只需要绑定到ASP.net应用程序中的其他端口,如果它还需要作为服务器运行,并且插件代理客户端。在这种情况下,您应该选择一个不同的端口,即使实际上有两种方法可以使它们在同一端口绑定时工作。
在您的情况下,您应该只读回您从客户端建立的连接的响应。