我一直在应用程序之间多次通过TCP套接字发送二进制数据,但从未使用过字符串。陷入了打算这样做的问题。这是我得到的:
TcpClient tcpClient = new TcpClient("localhost", port);
//Connects fine
NetworkStream ns = tcpClient.GetStream();
StreamWriter sw = new StreamWriter(ns);
//The code moves on but nothing seems to be sent unless I do
//a sw.Close() after this line. That would however close the
//ns and prevent me from reading the response further down
sw.Write("hello");
//I am using a stream reader with ReadToEnd() on the tcpListener
//which never receives the string from this piece of code
//Since the above never actually send I get stuck here
string response = new StreamReader(ns).ReadToEnd();
sw.Close();
tcpClient.Close();
如何在不关闭网络流的情况下发送字符串? ns.Flush()是我真正想要的。
答案 0 :(得分:7)
你有sw.Flush()
,应该有效。 WriteLine()
可能也做过了。
但是当另一方做了ReadLine()时,你必须确保以换行结束。尝试WriteLine()而不是Write()。
小心关闭StreamReader / Writer,他们也关闭他们的底层流。
答案 1 :(得分:1)
有一个StreamWriter.Flush()
。完成向您发送消息后,只需执行sw.Flush()
即可。但是,由于缓冲区大小相当大(最多几KB),正确的方法是在等待响应之前仅Flush()
。这样,对.Write()
的多次调用可以捆绑到一个数据包中,并同时向下发送。
答案 2 :(得分:0)
您只需要将StreamWriter上的AutoFlush属性设置为true。