2013-04-22 71 views
0

我对编写控制台应用程序很陌生。我无法弄清楚为什么这会在控制台中创建一堆额外的行,并写入它收到的消息。我确信这是愚蠢的,但我是在最后的手段,因为谷歌上没有人显然这与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 
+3

“额外的行”是什么意思? – SLaks 2013-04-22 19:47:18

+3

在调用'WriteLine'之前,您确定您的'recvText'包含数据吗? – Matthew 2013-04-22 19:47:58

+0

也许你的意思是使用'Console.Write(recvText)'(而不是'WriteLine') – JDB 2013-04-22 20:13:34

回答

0

我相信下面一行将返回一个空字符串

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 
+0

我相信你可能是对的。然而,在实施你的建议和我想到的其他一些事情之后,我仍然没有摆脱为编写消息的代码行和后面的console.readline()之间的巨大死区空间。在连接消息并将消息发送到此控制台应用程序的窗体应用程序中,我彻底修剪了所有内容并且我有一个状态标签,我发送一个字符串来报告发送字符,这些字符都是合适的。 – 2013-04-22 22:27:37

+0

然后,当它写入控制台时,我还修剪它和recvText.Length.ToString,它最终报告它已经收到八千个字符串中的一些奇数字符。 – 2013-04-22 22:31:07

+0

如果你尝试不同的编码会发生什么?在你使用ASCII的那一刻,看看这个链接来测试它:http://msdn.microsoft.com/en-ca/library/system.text.encoding(v=vs.71).aspx – Alex 2013-04-23 00:39:15

0

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

相关问题