0

我试图打印发送到端口 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:执行后应用程序也会崩溃

4

2 回答 2

1

在您的代码中:

SS.ToString();

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

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

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

于 2012-12-04T00:06:56.070 回答
0

如果另一部分是发送字符串(不是无法转换为字符串的二进制数据),那么您可以尝试

var s = new StreamReader(new NetworkStream(S));
s.Readline();
s.ReadToEnd(); //OR
于 2012-12-01T18:03:08.277 回答