2011-12-28 47 views
1

我已经得到了下面的代码,创建了一个很好地在listener.GetContext()等待的HTTPLISTENER。如何与我创建的HTTPLISTENER通信?

如何从另一个VB应用程序与此进行通信?我似乎无法让WebRequest.Create使用我的HTTPLISTENER示例所使用的URI。这从第二应用程序的代码行不工作:

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 

回答

1

不能使用前缀,因为它是!您可能需要将“*”替换为“127.0.0.1”才能连接到您的监听器。所以,如果你的前缀是一样的东西:

的 “http:// *:8080/HttpListener /”

然后你需要调用下面的URL能够连接到你的HTTP监听器:

“ http://127.0.0.1:8080/HttpListener/” --or - 的 “http://本地主机:8080/HttpListener /”

我希望这有助于:-)

0

最简单的方法来验证你的HttpListener实际上是在监听使用浏览器导航到您正在监听的网址。如果找不到它,你会得到一个404错误。

一旦您确认了侦听器正在工作,然后尝试使用WebClient在您的代码中与它进行通信。 WebClient的接口比HttpWebRequest简单得多,并且负责为你读取和写入数据流。

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