1

ワイヤレス センサーとやり取りするには、PHP サーバーが必要です。しかし、そのサーバーを Visual Basic アプリケーションで制御する必要もあります。

Visual Basic アプリケーションに必要な機能の一部:

  1. サーバーの起動/停止
  2. サーバー構成
  3. サーバー ディレクトリのファイルにアクセスします。

PHP ファイル (サーバー アプリケーション) は、ワイヤレス センサー モジュールからデータを受け取り、フラットなデータベース ファイル (CSV、XML) に格納するだけです。このデータが書き込まれた後、Visual Basic はフラット データベース ファイルにアクセスして分析を実行する必要があります。

使用するサーバーと、最も簡単な解決策を提供する特定の方法に関する提案はありますか?

4

1 に答える 1

2

まあ、あなたが望むのは幅広いことですが、それでも PHP 部分に関する十分な情報がありません。

しかし、VB.NET についてはお手伝いできます。これは、本当に役立つクラス (およびサブとイベント) です。

最初にいくつかの例

HTMLコードをロードするだけです:

Dim Page As New WEBhtml("http://www.example.com/index.php?get=something")
While Page.IsReady = False
End While
If IsNothing(Page.Exception) Then 
    MsgBox(Page.GetHtml)
Else
    MsgBox(Page.Exception.Message)
End If

POST を宛先に送信します (Dim 行のみ):

Dim Page As New WEBhtml("http://www.example.com/index.php?get=something", {"a=alpha", "b=beta", "c=I Don't Know :D !"})

使用の取り扱い:

Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim Page As New WEBhtml("http://www.e.com/i.php")
End Sub
Private Sub html_done(ByRef sender As WEBhtml) Handles Me.WebHtml_Done
    MsgBox("Timetook: " & sender.TimeTook / 1000 & "s")
    MsgBox("Url: " & sender.Url)
    If IsNothing(sender.Exception) Then
        MsgBox("Bandwidth: " & sender.Bytes / 1024 & "kb")
        MsgBox("HTML: " & sender.GetHtml)
    Else
        MsgBox("Error: " & sender.Exception.Message)
    End If
End Sub

見る?非常に簡単。


今すぐ始めましょう

次の 2 つの手順に従ってください

最初: System.Web 参照を追加する

Project > [Project name] Properties > Reference に移動し、[Add...] ボタンを押して、[System.Web ] にチェックを入れ、[ OK ] を押します。「インポートされた名前空間」でも確認してください

2番目: 「End Class」の前にこのブロックをコピーします

Public Shared Event WebHtml_Done(ByRef sender As WEBhtml)
Friend Shared Sub RaiseDone(ByRef wh As WEBhtml)
    RaiseEvent WebHtml_Done(wh)
End Sub
Public Class WEBhtml
    Private thrd As Threading.Thread
    Private Err As Exception
    Private BytesUsed As ULong = 0
    Private Time As UInteger = 0
    Private Html As String = ""
    Private _Url As String
    Private tmr As New Timer

    Private Sub initialize()
        tmr.Interval = 50
        AddHandler tmr.Tick, AddressOf Tick
        tmr.Enabled = True
        tmr.Start()
    End Sub

    Public Sub New(ByVal Url As String)
        thrd = New Threading.Thread(Sub() WEB_POST(Url))
        initialize()
        thrd.Start()
    End Sub
    Public Sub New(ByVal Url As String, ByVal PostData As String())
        thrd = New Threading.Thread(Sub() WEB_POST(Url, PostData))
        initialize()
        thrd.Start()
    End Sub

    Private Sub Tick(sender As Object, e As EventArgs)
        If thrd.IsAlive = False Then
            tmr.Enabled = False
            RaiseDone(Me)
        End If
    End Sub
    Private Sub WEB_POST(ByVal url As String, Optional ByVal values() As String = Nothing)
        _Url = url
        Dim data As String = ""
        Dim a, b As Integer
        b = My.Computer.Clock.TickCount
        Try
            For i = 0 To values.GetLength(0) - 1
                a = values(i).IndexOf("=")
                If a >= 0 Then
                    data += System.Web.HttpUtility.UrlEncode(Mid(values(i), 1, a)) & "=" & System.Web.HttpUtility.UrlEncode(Mid(values(i), a + 2))
                    If i < values.GetLength(0) - 1 Then data += "&"
                End If
            Next
        Catch
            data = ""
        End Try

        Try
            Dim request As System.Net.WebRequest = System.Net.WebRequest.Create(url)
            request.Method = "POST"
            Dim postdata As String = data
            Dim byteArray As Byte() = System.Text.Encoding.UTF8.GetBytes(postdata)
            request.ContentType = "application/x-www-form-urlencoded"
            request.ContentLength = byteArray.Length
            request.Timeout = 100000
            Dim dataStream As IO.Stream = request.GetRequestStream()
            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()

            Dim response As Net.WebResponse = request.GetResponse()
            dataStream = response.GetResponseStream()
            Dim reader As New IO.StreamReader(dataStream)
            Dim responseFromServer As String = reader.ReadToEnd()
            reader.Close()
            dataStream.Close()
            response.Close()
            BytesUsed += responseFromServer.Length + byteArray.Length
            Time = My.Computer.Clock.TickCount - b
            Html = (responseFromServer)
        Catch ex As Exception
            Err = ex
            Time = My.Computer.Clock.TickCount - b
            Html = ""
        End Try
    End Sub

    Public ReadOnly Property Exception() As Exception
        Get
            Return Err
        End Get
    End Property
    Public ReadOnly Property TimeTook() As UInteger
        Get
            Return Time
        End Get
    End Property
    Public ReadOnly Property Bytes() As ULong
        Get
            Return BytesUsed
        End Get
    End Property
    Public ReadOnly Property GetHtml() As String
        Get
            Return Html
        End Get
    End Property
    Public ReadOnly Property IsReady() As Boolean
        Get
            Return Not thrd.IsAlive
        End Get
    End Property
    Public ReadOnly Property Url() As String
        Get
            Return _Url
        End Get
    End Property
End Class

これは適切に機能すると思います。

それが役に立てば幸い。

于 2013-08-27T10:34:50.983 に答える