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

本文关键字:TCP 端口 应用程序 何侦听 另一个 | 更新日期: 2023-09-27 17:56:51

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

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

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

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

套接字实际上可以是双向的。您可以使用"发送"发送内容,并使用"接收"侦获取答复。打开一个套接字,然后将其用于发送和接收。

简而言之,没有。

打开端口后,如果进一步尝试使用来自不同来源的同一端口,则会引发异常 - 就像您现在遇到的那样。没有办法解决这个问题。

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

'/*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()

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