Vb.net TCPClient/Server-如何通过TCP/IP ASCII特殊字符发送数据
我有一个应用程序,它当前通过TCP/IP端口6000发送请求,并等待回复 我已经收到了请求/回复协议,但似乎无法发送ASCII控制字符,如SOH、SOT、EOT等。。。01,02,03 这是我通过TCP端口6000接收的,我可以在Msgbox中显示。 这就是我要送回去的。。。 这是我的班级代码Vb.net TCPClient/Server-如何通过TCP/IP ASCII特殊字符发送数据,vb.net,ascii,tcpclient,tcplistener,Vb.net,Ascii,Tcpclient,Tcplistener,我有一个应用程序,它当前通过TCP/IP端口6000发送请求,并等待回复 我已经收到了请求/回复协议,但似乎无法发送ASCII控制字符,如SOH、SOT、EOT等。。。01,02,03 这是我通过TCP端口6000接收的,我可以在Msgbox中显示。 这就是我要送回去的。。。 这是我的班级代码 Private Sub StartListen() Try ' Must listen on correct port- must be same as port client
Private Sub StartListen()
Try
' Must listen on correct port- must be same as port client wants to connect on.
Const portNumber As Integer = 6000
Dim tcpListener As New TcpListener(portNumber)
tcpListener.Start()
' Console.WriteLine("Waiting for connection...")
RichTextBox1.Text = RichTextBox1.Text & "Waiting for Connection ...." & vbCrLf
'
'
' SOH <ID> STX <DATA> ETX <CKSUM> EOT
'
'
Top:
'Accept the pending client connection and return a TcpClient initialized for communication.
Dim tcpClient1 As TcpClient = tcpListener.AcceptTcpClient()
' Get the stream
Dim networkStream As NetworkStream = tcpClient1.GetStream()
' Read the stream into a byte array
Dim bytes(tcpClient1.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient1.ReceiveBufferSize))
' Return the data received from the client to the console.
Dim clientdata As String = ASCIIEncoding.Unicode.GetString(bytes)
RichTextBox1.Text = RichTextBox1.Text & clientdata
Dim soh As String = GetChar(clientdata, 1)
Dim id As String = "010000000000000000"
Dim stx As String = GetChar(clientdata, 20)
Dim etx As String = GetChar(clientdata, 44)
Dim ack As String = System.Convert.ToChar(System.Convert.ToUInt32("06", 16))
Dim cksum As String = clientdata.Substring(44, 4)
Dim eot As String = GetChar(clientdata, 49)
Dim data As String = " 1Some Date "
Dim responseString As String = soh & id & stx & data & etx & cksum & eot & ack
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkStream.Write(sendBytes, 0, sendBytes.Length)
RichTextBox1.Text = RichTextBox1.Text & vbCrLf & responseString & vbCrLf
tcpClient1.Close()
tcpListener.Stop()
GoTo Top
Catch e As Exception
Console.WriteLine(e.ToString())
Console.ReadLine()
End Try
End Sub
Private子列表()
尝试
'必须在正确的端口上侦听-必须与客户端要连接的端口相同。
常量端口号为整数=6000
作为新tcpListener(端口号)的Dim tcpListener
tcpListener.Start()
'Console.WriteLine(“正在等待连接…”)
RichTextBox1.Text=RichTextBox1.Text&“等待连接…”和vbCrLf
'
'
“SOH STX ETX EOT
'
'
顶部:
'接受挂起的客户端连接并返回为通信而初始化的TcpClient。
将tcpClient1设置为TcpClient=tcpListener.AcceptTcpClient()
“去小溪边
将networkStream作为networkStream=tcpClient1.GetStream()进行调整
'将流读入字节数组
Dim字节(tcpClient1.ReceiveBufferSize)作为字节
networkStream.Read(字节,0,CInt(tcpClient1.ReceiveBufferSize))
'将从客户端接收的数据返回控制台。
Dim clientdata As String=ASCIIEncoding.Unicode.GetString(字节)
RichTextBox1.Text=RichTextBox1.Text&clientdata
Dim soh As String=GetChar(客户端数据,1)
Dim id为String=“010000000000000000”
Dim stx As String=GetChar(clientdata,20)
Dim etx As String=GetChar(clientdata,44)
Dim ack As String=System.Convert.ToChar(System.Convert.ToUInt32(“06”,16))
Dim cksum As String=clientdata.Substring(44,4)
Dim eot As String=GetChar(clientdata,49)
Dim数据为String=“1某些日期”
Dim响应字符串=soh&id&stx&data&etx&cksum&eot&ack
Dim sendBytes As[Byte]()=Encoding.ASCII.GetBytes(responseString)
networkStream.Write(sendBytes,0,sendBytes.Length)
RichTextBox1.Text=RichTextBox1.Text&vbCrLf&responseString&vbCrLf
tcpClient1.Close()
tcpListener.Stop()
转到顶端
捕获e作为例外
Console.WriteLine(如ToString())
Console.ReadLine()
结束尝试
端接头
ascienceoding.Unicode
您应该研究该表达式。。。这相当于Encoding.Unicode
,这不是您想要的(您想要ASCII
)
另外,您忽略了从
读取的返回值,这是一个常见错误。谢谢,我注意到了这一错误,并将其更改为Dim clientdata作为String=Encoding.ASCII.GetString(bytes)不理解我忽略的返回值是什么?调用了networkStream.Read,返回实际读取的字节数。你对ReceiveBufferSize的使用也是一个错误,因为该值不是可用的数据量。好的,我想我应该从某个地方开始了解这一点,你能为我建议一个关于TCP通信的教程吗,因为我不了解我在这里做错了什么的基本原理,不想浪费你的时间。好的计划。也许这是个好的开始,我不知道。网络上的大多数TCP代码都很可怕。