通过tcp网络流读/写字符串

时间:2011-02-02 14:24:36

标签: c# .net c#-4.0

我一直在应用程序之间多次通过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()是我真正想要的。

3 个答案:

答案 0 :(得分:7)

你有sw.Flush(),应该有效。 WriteLine()可能也做过了。

但是当另一方做了ReadLine()时,你必须确保以换行结束。尝试WriteLine()而不是Write()。

小心关闭StreamReader / Writer,他们也关闭他们的底层流。

答案 1 :(得分:1)

有一个StreamWriter.Flush()。完成向您发送消息后,只需执行sw.Flush()即可。但是,由于缓冲区大小相当大(最多几KB),正确的方法是在等待响应之前仅Flush()。这样,对.Write()的多次调用可以捆绑到一个数据包中,并同时向下发送。

答案 2 :(得分:0)

您只需要将StreamWriter上的AutoFlush属性设置为true。