【发布时间】:2015-10-21 00:42:43
【问题描述】:
长话短说,我正在尝试开发一个需要与服务器建立 Tcp 连接的应用程序。在这个领域没有以前的经验,我最终没有我的功能工作。所以我决定制作一个简单的控制台应用程序来检查我的命令及其响应。关于建立连接的部分进展顺利,关于写入网络流的部分也很顺利(我认为),但是在尝试显示服务器响应时我碰壁了: 每次我的 porgram 到达它必须对服务器响应和 WriteLine 进行编码的行时,我的控制台应用程序都会变黑,所有文本都会消失。你能告诉我正在使用的代码有什么问题吗?直到控制台尝试显示响应的部分顺利进行,我检查了。我想将服务器的响应作为普通字符串(如果可能的话我猜......)
static void ServerTalk(TcpClient tcpClient,NetworkStream networkStream, StreamWriter streamWriter, StreamReader streamReader)
{
//Messaging methods:
Console.WriteLine("Client: ");
string message = Console.ReadLine();
streamWriter.WriteLine(message);
streamWriter.Flush();
//Response methode:
byte[] data = new byte[tcpClient.ReceiveBufferSize];
int ret = networkStream.Read(data, 0, data.Length);
string respond = Encoding.ASCII.GetString(data).TrimEnd();
Console.WriteLine("Server: ");
Console.WriteLine(respond);
ServerTalk(tcpClient, networkStream, streamWriter, streamReader);
}
【问题讨论】:
-
我怀疑您在显示为黑色的数据末尾发送空值。我会在发送方用返回 ('\n') 终止数据,然后在接收端只打印字符直到返回。
-
方法结束时的递归调用呢?这应该如何工作?
-
@HughJones 我只是把它放在了整个开始的事情上,因为应用程序要做的一切都在那个块代码中,其余的代码都在工作,一个时间使用,我认为我不需要这个应用程序做更多的事情。
-
@jdweng 你能解释一下吗?
-
@HughJones 是的,我认为这是一个更好的主意,谢谢