2017-06-28 18 views
0

基本的な印刷クライアントがあり、Ajaxを使用してWebから送信された接続を待ち受けます。以上送信され、いくつかのvairables、コンテキストの例jQueryのリクエストがあります127.0.0.1:13000接続:キープアライブ たContentTcpListenerがPOSTレスポンス変数を処理します

$.ajax({ 
      url : 'http://127.0.0.1:13000', 
      type : 'POST', 
      data : { 
      'shipmentNumber': 'SAMPLESN998SSkLAIS', 
      'labelType': 'labelTypePostageEND', 
      'pdfLabel': 'pdfLabel__' 
     } 

これは

POST/HTTP/1.1ホストと見られています長さ:70621受け入れ:/原産地:nullユーザエージェント:Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36(GeckoのようなKHTML) Chrome/59.0.3071.109 Safari/537.36コンテンツタイプ: アプリケーション/ x-www-form-urlencoded;文字セット= UTF-8エンコーディングを受け入れ: GZIPを収縮、BR-言語を受け入れ:EN-GB、EN-US; Q = 0.8、EN; Q = 0.6 shipmentNumber = SAMPLESN998SSkLAIS & labelType = labelTypeRoyalMailEND & pdfLabel =

私は最終的に "labelType"、 "shipmentNumber"などを取得する必要があります(labelType/ENDは使用するデータの一部ではなく、以下に示すように検索した文字列です)。これを行う最善の方法は不明です。現在、私は(簡体字)があります。

 Dim port As Int32 = 13000 
     Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1") 

     server = New TcpListener(localAddr, port) 

     ' Start listening for client requests. 
     server.Start() 

     ' Buffer for reading data 
     Dim bytes(10240000) As Byte 
     Dim data As String = Nothing 

     ' Enter the listening loop. 
     While True 

      Dim client As TcpClient = server.AcceptTcpClient() 

      data = Nothing 

      ' Get a stream object for reading and writing 
      Dim stream As NetworkStream = client.GetStream() 

      Dim i As Int32 

      ' Loop to receive all the data sent by the client. 
      i = stream.Read(bytes, 0, bytes.Length) 
      data = System.Text.Encoding.ASCII.GetString(bytes, 0, 5000) 

      ' >>>> The bit that matters, split the data based on what we know will be there 
      Dim searchIndex As Integer = data.IndexOf("labelType") 
      Dim f As String = data.Substring(searchIndex + 1, data.IndexOf("END", searchIndex + 1) - searchIndex - 1) 

      MessageBox.Show(data) 

      ' >>> Response and Close connection removed to keep question clean 
     End While 

あなたは私は私がそこに入れて、「マーカー」または区切り文字のための応答を検索する見ることができるように。それは信頼できず、より良い方法があるはずだと感じます。私はseen some questionsを持っていますが、彼らはdirectly address thisではありません。これはすでに最良の方法かもしれませんが、私には分かりません。

これを行うにはどのような方法が必要ですか?

良い方法がありますか?

答えて

1

shipmentNumber=をキーにパラメータの先頭を探します。その後、区切り文字の&を使用して分割します。その後、それぞれを区切り文字として=デリミタを使用してパラメータ/値に分割します。

data = System.Text.Encoding.ASCII.GetString(bytes, 0, 5000) 

Dim dataStart As String = "shipmentNumber=" 

If data.Contains(dataStart) Then 
    data = data.Substring(data.IndexOf(dataStart)).Trim 
    Dim _params() As String = Split(data, "&") 
    For Each p In _params 
     Dim _values() As String = Split(p, "=") 
     If _values.Length > 0 Then 
      Dim _parameter As String = _values(0) 
      Dim _value As String = "" 
      If _values.Length > 1 Then 
       _value = _values(1) 
      End If 
      Debug.Print("parameter = " & _parameter) 
      Debug.Print("value = " & _value) 
     End If 
    Next 
End If 
関連する問題