Vb.net TCPClient/Server-如何通过TCP/IP ASCII特殊字符发送数据

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

我有一个应用程序,它当前通过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 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代码都很可怕。