#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 приложение, если оно также должно запускаться как сервер с подключаемым модулем, действующим как клиент. В этом случае вам следует выбрать другой порт, хотя на самом деле существуют способы заставить его работать, когда они оба привязаны к одному порту.
Однако в вашем случае вам следует просто прочитать ответы от соединения, которое вы установили с клиента.