【问题标题】:Print Stream Information打印流信息
【发布时间】:2012-12-01 18:00:31
【问题描述】:

我试图打印发送到端口 2000 的信息,但我得到的只是“System.Net.Sockets.NetworkStream”。有没有办法将流转换为字符串?或者直接打印流信息的方法。

        static void Main(string[] args)
    {
        while (true)
        {
            TcpListener TL = new TcpListener(IPAddress.Any, 2000);
            TL.Start();
            Socket S = TL.AcceptSocket();
            Stream SS = new NetworkStream(S);
            string MSG = SS.ToString(); 
            Console.WriteLine(MSG);
        }
    }

编辑:这里是客户端

       static void Main(string[] args)
    {

            try
            {
                TcpClient TC = new TcpClient();
                TC.Connect("XXX.XXX.XXX.XXX", 2000);
                NetworkStream Writer = TC.GetStream();
                string MSG = Console.ReadLine();
                byte[] pack = Encoding.ASCII.GetBytes(MSG);
                Writer.Write(pack, 0, pack.Length);
                Writer.Flush();
            }
            catch
            {
                Console.WriteLine(" faild");
                Console.ReadLine();
            }


    }

PS:应用程序在执行后也会崩溃

【问题讨论】:

  • 使用 try/catch 块来避免应用程序崩溃。还有@L.B.给你一个答案,不要调用流的对象ToString来获取流数据,而是使用StreamReader。

标签: c# sockets stream tcplistener


【解决方案1】:

在您的代码中:

SS.ToString();

将始终返回System.Net.Sockets.NetworkStream!因为ToString()函数返回代表当前对象的字符串,所以可以使用StreamReader从流中读取一行。

Stream SS = new NetworkStream(S);
StreamReader reader = new StreamReader(SS);
string MSG = reader.ReadLine();
Console.WriteLine(MSG);

当然你应该在客户端之前运行服务器程序,因为 TCP 是面向连接的。

【讨论】:

    【解决方案2】:

    如果对方发送的是字符串(不是不能转换成字符串的二进制数据)那么你可以试试

    var s = new StreamReader(new NetworkStream(S));
    s.Readline();
    s.ReadToEnd(); //OR
    

    【讨论】:

    • 我已经更新了代码,但仍然没有写入文本。它清楚地得到了它不会打印的信息
    • 你怎么知道It clearly gets the information?您使用 Readline 或 ReadtoEnd 哪个代码?如果您不发送Environment.NewLine ReadLine 将永远不会返回。 ReadToEnd 仅在对方关闭连接时返回。
    • 当我将信息从客户端发送给阅读器时,应用程序崩溃了。每当连接关闭后,它就会这样做(这是我懒得修复的 windows xp 问题)。我也使用 ReadtoEnd();并且在发送信息后立即关闭连接。 PS:应该显示文本后它会崩溃。所以这不是阻止它打印的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多