Как мне связаться с созданным мной HTTPLISTENER? - PullRequest
1 голос
/ 28 декабря 2011

У меня есть этот код ниже, который создает HTTPLISTENER, который приятно ожидает в listener.GetContext ().

Как мне общаться с этим из другого приложения VB? Я не могу заставить WebRequest.Create работать с URI, который использует мой пример HTTPLISTENER. Эта строка кода из второго приложения не работает:

Dim request As WebRequest = WebRequest.Create(prefixes(0))

Вот код:

Imports System.Net
Imports System.Globalization

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim prefixes() As String = {"http://*:8080/HttpListener/"}

    ProcessRequests(prefixes)

End Sub

Private Sub ProcessRequests(ByVal prefixes() As String)
    If Not System.Net.HttpListener.IsSupported Then
        Console.WriteLine( _
            "Windows XP SP2, Server 2003, or higher is required to " & _
            "use the HttpListener class.")
        Exit Sub
    End If

    ' URI prefixes are required,
    If prefixes Is Nothing OrElse prefixes.Length = 0 Then
        Throw New ArgumentException("prefixes")
    End If

    ' Create a listener and add the prefixes.
    Dim listener As System.Net.HttpListener = _
        New System.Net.HttpListener()
    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next

    Try
        ' Start the listener to begin listening for requests.
        listener.Start()
        Console.WriteLine("Listening...")

        ' Set the number of requests this application will handle.
        Dim numRequestsToBeHandled As Integer = 10

        For i As Integer = 0 To numRequestsToBeHandled
            Dim response As HttpListenerResponse = Nothing
            Try
                ' Note: GetContext blocks while waiting for a request. 
                Dim context As HttpListenerContext = listener.GetContext()

                ' Create the response.
                response = context.Response
                Dim responseString As String = _
                    "<HTML><BODY>The time is currently " & _
                    DateTime.Now.ToString( _
                    DateTimeFormatInfo.CurrentInfo) & _
                    "</BODY></HTML>"
                Dim buffer() As Byte = _
                    System.Text.Encoding.UTF8.GetBytes(responseString)
                response.ContentLength64 = buffer.Length
                Dim output As System.IO.Stream = response.OutputStream
                output.Write(buffer, 0, buffer.Length)

            Catch ex As HttpListenerException
                Console.WriteLine(ex.Message)
            Finally
                If response IsNot Nothing Then
                    response.Close()
                End If
            End Try
        Next
    Catch ex As HttpListenerException
        Console.WriteLine(ex.Message)
    Finally
        ' Stop listening for requests.
        listener.Close()
        Console.WriteLine("Done Listening...")
    End Try
End Sub

End Class

Ответы [ 2 ]

1 голос
/ 25 января 2012

Вы не можете использовать префиксы как есть! Возможно, вам придется заменить «*» на «127.0.0.1», чтобы иметь возможность подключиться к вашему слушателю. Так что если ваш префикс что-то вроде:

"http://*:8080/HttpListener/"

Затем вам нужно позвонить по следующему URL, чтобы иметь возможность подключиться к вашему прослушивателю HTTP:

"http://127.0.0.1:8080/HttpListener/" --или же -- «http://localhost:8080/HttpListener/"

Надеюсь, это поможет: -)

0 голосов
/ 23 августа 2012

Самый простой способ убедиться, что ваш HttpListener действительно прослушивает, - это перейти по URL, который вы слушаете, с помощью браузера.Если он не может его найти, вы получите ошибку 404.

После того, как вы убедились, что слушатель работает, попробуйте использовать WebClient для связи с ним в вашем коде.WebClient имеет гораздо более простой интерфейс, чем HttpWebRequest, и обеспечивает чтение и запись из потоков.

string result = WebClient.DownloadString("http://google.com");
Console.WriteLine(result);
...