VB. net сервер недоступен извне даже при использовании подстановочного знака - PullRequest
0 голосов
/ 19 февраля 2020

Я настроил сервер VB. NET, но он отвечает только на запросы от своего собственного хоста. Если я пытаюсь отправить запрос с другого компьютера (в той же сети), он не отвечает на запрос, он просто истекает. Мое приложение в основном прослушивает запрос на порт 1212, затем делает снимок экрана и отправляет ответ обратно.

Я пытался использовать оба параметра http://*:1212/ и http://+:1212/, но это работает, только если я выполню запрос из компьютер, на котором размещен сервер.

С хоста это работает http://192.168.1.150:1212/

С другого компьютера в сети это не работает http://192.168.1.150:1212/ (время ожидания запроса)

Вот мое заявление

Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Threading

Public Class Form1
    Private t As New Thread(AddressOf IncomingMessage)
    Private Const bufferSize As Integer = 1024 * 512
    Dim prefixes(0), Port, UserIP, UserIPPort As String
    Dim isWorking As Boolean = False


    ' From1_Load()
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.CheckForIllegalCrossThreadCalls = False
        prefixes(0) = "http://*:1212/"

        With t
            If (.ThreadState And ThreadState.Unstarted) <> 0 Then
                .IsBackground = True
                .Start()
            End If
        End With
    End Sub


    ' IncomingMessage()
    Private Sub IncomingMessage()
    Bgn:
        If prefixes(0) Is Nothing OrElse prefixes(0).Length = 0 Then
            Throw New ArgumentException("prefixes")
        End If

        Dim listener As HttpListener = New HttpListener()

        For Each s As String In prefixes
            listener.Prefixes.Add(s)
        Next

        Try
            listener.Start()

            Dim numRequestsToBeHandled As Integer = 10

            For i As Integer = 0 To numRequestsToBeHandled
                Dim response As HttpListenerResponse = Nothing
                Dim context As HttpListenerContext = listener.GetContext()
                Dim sr As StreamReader = New StreamReader(context.Request.InputStream)
                Dim URLRequestClient As String = sr.ReadToEnd()

                MessageBox.Show(URLRequestClient)

                Dim bmp As Bitmap = ScreenCap()
                bmp.Save(Application.StartupPath & "\screenshot.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
                bmp.Dispose()

                context.Response.ContentType = "image/jpeg"

                Dim buffer = New Byte(bufferSize - 1) {}

                Using fs = File.OpenRead(Application.StartupPath & "\screenshot.jpg")
                    context.Response.ContentLength64 = fs.Length

                    Dim read As Integer

                    While (InlineAssignHelper(read, fs.Read(buffer, 0, buffer.Length))) > 0
                        context.Response.OutputStream.Write(buffer, 0, read)
                    End While
                End Using

                context.Response.OutputStream.Close()
            Next
        GoTo Bgn
    End Sub

1 Ответ

1 голос
/ 19 февраля 2020

Оказалось, что это проблема с брандмауэром на моем Windows 10 ноутбуке, где я работал на сервере. Я отключил брандмауэр для частных и общедоступных сетей c, и это сработало. Я полагаю, что лучшим решением было бы добавить мое приложение к allowed list приложениям к go через брандмауэр. (но по какой-то причине это не сработало, мне пришлось полностью отключить брандмауэр)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...