Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 控制台应用程序添加额外的行,为什么?_Vb.net - Fatal编程技术网

Vb.net 控制台应用程序添加额外的行,为什么?

Vb.net 控制台应用程序添加额外的行,为什么?,vb.net,Vb.net,我对编写控制台应用程序非常陌生。我不明白为什么在控制台运行和写入接收到的消息时,会在控制台中创建一堆额外的行。我相信这是愚蠢的,但我是在最后的手段,因为谷歌上没有人显然是如此愚蠢的vb.net。提前谢谢 Sub Main() Do Console.WriteLine("Waiting for connection...") server.Start() client = server.AcceptTcpClient() Co

我对编写控制台应用程序非常陌生。我不明白为什么在控制台运行和写入接收到的消息时,会在控制台中创建一堆额外的行。我相信这是愚蠢的,但我是在最后的手段,因为谷歌上没有人显然是如此愚蠢的vb.net。提前谢谢

Sub Main()
    Do
        Console.WriteLine("Waiting for connection...")
        server.Start()
        client = server.AcceptTcpClient()
        Console.WriteLine("Connected")
        Do
            stream = client.GetStream()
            Dim recvBytes(client.ReceiveBufferSize) As Byte
            stream.Read(recvBytes, 0, client.ReceiveBufferSize)
            Dim recvText As String = Encoding.ASCII.GetString(recvBytes)
            Console.WriteLine(recvText)
            responses = Console.ReadLine
            If responses = "close" Then
                stream.Close()
                client.Close()
                server.Stop()
                Environment.Exit(0)
            Else
                Dim sendBytes() As Byte = Encoding.ASCII.GetBytes(responses)
                stream.Write(sendBytes, 0, sendBytes.Length)
                Console.WriteLine("Message Sent")
            End If
            If client.Connected = False Then
                Console.WriteLine("Client is no longer connected")
                Exit Do
            End If
        Loop
    Loop
End Sub

我相信下面这行返回的是一个空字符串

Dim recvText As String = Encoding.ASCII.GetString(recvBytes)
因此,在打印行之前,只需验证行是否为空。修改后的代码如下:

Sub Main()
Do
    Console.WriteLine("Waiting for connection...")
    server.Start()
    client = server.AcceptTcpClient()
    Console.WriteLine("Connected")
    Do
        stream = client.GetStream()
        Dim recvBytes(client.ReceiveBufferSize) As Byte
        stream.Read(recvBytes, 0, client.ReceiveBufferSize)
        Dim recvText As String = Encoding.ASCII.GetString(recvBytes)
        If recvText <> "" Then Console.WriteLine(recvText)
        responses = Console.ReadLine
        If responses = "close" Then
            stream.Close()
            client.Close()
            server.Stop()
            Environment.Exit(0)
        Else
            Dim sendBytes() As Byte = Encoding.ASCII.GetBytes(responses)
            stream.Write(sendBytes, 0, sendBytes.Length)
            Console.WriteLine("Message Sent")
        End If
        If client.Connected = False Then
            Console.WriteLine("Client is no longer connected")
            Exit Do
        End If
    Loop
Loop

End Sub
Sub-Main()
做
Console.WriteLine(“等待连接…”)
server.Start()
client=server.AcceptTcpClient()
控制台写入线(“已连接”)
做
stream=client.GetStream()
Dim recvBytes(client.ReceiveBufferSize)作为字节
stream.Read(recvBytes,0,client.ReceiveBufferSize)
Dim recvText As String=Encoding.ASCII.GetString(recvBytes)
如果是recvText“”,则为Console.WriteLine(recvText)
responses=Console.ReadLine
如果回答=“关闭”,则
stream.Close()
client.Close()
server.Stop()
环境。退出(0)
其他的
Dim sendBytes()为Byte=Encoding.ASCII.GetBytes(响应)
stream.Write(sendBytes,0,sendBytes.Length)
Console.WriteLine(“已发送消息”)
如果结束
如果client.Connected=False,则
Console.WriteLine(“客户端不再连接”)
退出Do
如果结束
环
环
端接头

我遇到的问题与receivebuffer大小有关。一旦我真的设置了它,然后使用字符串生成器来构建最终的字符串;一切都很顺利。谢谢你的建议。这些建议导致了一些非常有趣和非常需要的阅读,关于一些我没有考虑过的事情,事实证明,需要更多关注

“额外的行”是什么意思?在你调用
WriteLine
之前,你确定你的
recvText
包含数据吗?也许你是想使用
控制台。Write(recvText)
(而不是
WriteLine
)我在遥远的地方的一些论坛上找到了一些帖子。看起来我的stream.read()中的buffer size参数可能有问题,但我不必对如何在事务发生之前准确地确定它将接收多少个字符有任何模糊的想法。我真的不想使用任何类型的字符串生成器,因为我最终希望它接收表示像素的编码字节,并将它们构建到图像中。关于如何为networkstream.read(client,0,this.one.here)方法获取一个好的大小参数,您有什么想法吗?我相信您可能是对的。然而,在实施了你的建议和我想到的其他一些事情之后;我仍然无法摆脱为消息编写的行与以下控制台之间的巨大空白。readline()在连接并向此控制台应用程序发送消息的窗体应用程序中,我已彻底修剪了所有内容,并在其中添加了状态标签,我发送一个字符串,报告所有合适的发送字符。然后在将其写入控制台时,我也会对其进行修剪并recvText.Length.ToString,结果它报告已收到字符串中的8000个奇数字符。如果尝试不同的编码,会发生什么情况?现在您正在使用ASCII,请查看此链接以测试它:Alex,谢谢您对编码的建议。我甚至没有考虑过这一点。不幸的是,我认为这不是问题所在。我阅读了您链接到的整个页面以及特定编码的页面,尝试了所有这些页面,但仍然没有结果。不过,我很高兴你提到了这件事。我将来可能会更加关注这一点。谢谢