【发布时间】:2017-12-02 10:00:31
【问题描述】:
我们有一个基本的打印客户端,它使用 Ajax 侦听从 Web 发送的连接。发送了几个变量,例如 Jquery 上下文请求:
$.ajax({
url : 'http://127.0.0.1:13000',
type : 'POST',
data : {
'shipmentNumber': 'SAMPLESN998SSkLAIS',
'labelType': 'labelTypePostageEND',
'pdfLabel': 'pdfLabel__'
}
这被视为
POST / HTTP/1.1 主机:127.0.0.1:13000 连接:保持活动状态 内容长度:70621 接受:/ 来源:空用户代理:Mozilla/5.0 (Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko) Chrome/59.0.3071.109 Safari/537.36 内容类型: 应用程序/x-www-form-urlencoded; charset=UTF-8 接受编码: gzip, deflate, br 接受语言:en-GB,en-US;q=0.8,en;q=0.6 shippingNumber=SAMPLSN998SSkLAIS&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,我不确定这些是否正确。这可能已经是最好的方法了,但不问我不知道。
你会使用什么方法来做到这一点?
有没有更好的办法?
【问题讨论】:
标签: vb.net post tcp tcplistener