Как прослушать TCP-порт, который уже прослушивается другим приложением

#c# #asp.net #vb.net #networking #network-programming

#c# #asp.net #vb.net #сеть #сетевое программирование

Вопрос:

У меня есть плагин, который всегда прослушивает порт 6002, и у меня есть ASP.net приложение, которое отправляет сообщения на тот же порт и получает ответ от плагина на том же порту, отправка работает нормально, и плагин отправляет ответ на тот же порт, но я не знаю, как перехватить этот ответ, когда я пытаюсь прослушать тот же порт с помощью Tcplistener, метод start выдает это исключение: обычно разрешено только одно использование каждого адреса сокета (протокол / сетевой адрес / порт),

есть ли какой-либо способ перехватить полученное сообщение Спасибо

Комментарии:

1. Из того, что я могу сказать, невозможно открыть порт, как только он используется.

2. ПОЖАЛУЙСТА, ИЗБЕГАЙТЕ ВСЕХ ЗАГЛАВНЫХ БУКВ ПРИ НАПИСАНИИ. Это очень грубо с вашей стороны.

3. Он прослушивается плагином Java, означает ли это, что я вообще не могу получить к нему доступ???

Ответ №1:

Похоже, вы ошибочно предполагаете, что сокет, который вы получаете от TcpListener.AcceptSocket можно использовать только в одном направлении.

Сокеты на самом деле могут быть двунаправленными. Вы можете использовать Send для отправки чего-либо и получать для прослушайте получите ответы. Откройте один сокет, а затем используйте его как для отправки, так и для получения.

Комментарии:

1. Итак, я могу слушать!! все говорят «нет» и голосуют против моего вопроса!

2. нет, вы не можете (легко) прослушать. «прослушивать» в смысле TCP означает прослушивать новые входящие соединения.

Ответ №2:

Короче говоря, нет.

Как только порт будет открыт, будет выдано исключение, если будут предприняты дальнейшие попытки использовать этот же порт из другого источника — как вы испытываете прямо сейчас. Нет способа обойти это.

Ответ №3:

Я решил эту проблему, используя этот способ,, Я знаю, что это старый метод, но он работает!! :

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

Ответ №4:

Если вы хотите проверить трафик, вы можете использовать winpcap.

редактировать: Я не думаю, что вы задаете правильный вопрос. В этом случае подключаемым модулем является сервер (прослушивающий порт 6002) и ваш ASP.net приложение — это клиент, прослушивающий некоторый произвольный порт. Вам нужно только привязаться к другому порту в вашем ASP.net приложение, если оно также должно запускаться как сервер с подключаемым модулем, действующим как клиент. В этом случае вам следует выбрать другой порт, хотя на самом деле существуют способы заставить его работать, когда они оба привязаны к одному порту.
Однако в вашем случае вам следует просто прочитать ответы от соединения, которое вы установили с клиента.