当前位置:编程学习 > C#/ASP.NET >>

求助!!!C# TcpClient的getstream() 怎么读不到数据啊???

各位大侠,我在测试一段非常简单的代码。发送命令都正常,但文本框怎么都显示不了数据。这是怎么回事啊,我是新手啊,求助求助~~~


            TcpClient client = new TcpClient("192.168.1.2", 23);
            
            Byte[] data = System.Text.Encoding.Default.GetBytes("@@@@"+"\r\n");//发数据data

            NetworkStream stream = client.GetStream();
            stream.Write(data, 0, data.Length);
            System.Threading.Thread.Sleep(1000);

            Byte[] data1 = System.Text.Encoding.Default.GetBytes("A10"+"\r\n");//发数据data1

            NetworkStream stream1 = client.GetStream();
            stream1.Write(data1, 0, data1.Length);

           //下面是读数据,文本框显示不到任何数据,怎么回事????

            Byte[] data3 = new Byte[client.ReceiveBufferSize];
            
            
            Int32 bytes = stream1.Read(data3, 0, data3.Length);
            string responseData = System.Text.Encoding.ASCII.GetString(data3, 0, bytes);
            textBox3.Text = responseData; --------------------编程问答-------------------- 接收怎么也得用 TCPListener吧。。 --------------------编程问答-------------------- 不是啊,我就是做一个客户端,连到一个telnet设备上,执行完命令这个设备会有返回值啊。 --------------------编程问答-------------------- 你到网上下个工具,抓数据包,看看设备有没有发送数据给你 --------------------编程问答-------------------- 在 Int32 bytes = stream1.Read(data3, 0, data3.Length);
这句加个断点看下撒,
如果你的程序没有抛出异常,顺利的到了这一步,检查下bytes的值,如果为0,则表示服务端没给你发数据 --------------------编程问答-------------------- 可以看得到收到了数据啊,我换了几行代码输出stream.read的data3[],可以看到有东西出来啊(附图),这到底怎么回事呢????

           //Int32 bytes = stream.Read(data3, 0, data3.Length);
          // string responseData = System.Text.Encoding.Default.GetString(data3);


            
           string sss = "";
            for (int i=0; i<data3.Length; i++)
            {
                 sss += data3[i].ToString();
            }
            textBox3.Text = sss; --------------------编程问答-------------------- 你的数据不能正确的转换为string
看你贴的图,13是换行,01是不可见字符
文本框看不到数据应该就是这个原因了 --------------------编程问答-------------------- 额 上面看错了 你输出的可能不是13,01,有可能是1,3,0这样的数据。遇到0的话字符串就结束了,如果在0之前没有可见字符的话,你在文本框就看到东西了。 --------------------编程问答-------------------- 楼上大侠,具体我的代码应该怎么改动一下才能正常显示字符呢? --------------------编程问答-------------------- 你发送数据的格式Byte[] data = System.Text.Encoding.Default.GetBytes("@@@@"+"\r\n");//发数据data
接收数据的格式string responseData = System.Text.Encoding.ASCII.GetString(data3, 0, bytes);
格式不同。

Int32 bytes = stream1.Read(data3, 0, data3.Length);
bytes是你实际接收到的长度,可以加断点看看 --------------------编程问答--------------------
引用 5 楼 u011993483 的回复:
可以看得到收到了数据啊,我换了几行代码输出stream.read的data3[],可以看到有东西出来啊(附图),这到底怎么回事呢????

           //Int32 bytes = stream.Read(data3, 0, data3.Length);
          // string responseData = System.Text.Encoding.Default.GetString(data3);


            
           string sss = "";
            for (int i=0; i<data3.Length; i++)
            {
                 sss += data3[i].ToString();
            }
            textBox3.Text = sss;
咳咳 为什么不用StringBuilder
你这样的代码很慢。。。 --------------------编程问答-------------------- 不是所有的数据都能转换成可见字符串的,不要纠结于非要看到字符串撒。
就像你用记事本打开二进制文件(比如说exe文件),显示的可能就是一些乱码。
如果你能控制服务端的话,把那边的发送的数据调整一下,改为发送字符串,这样你这边收到的数据就能显示了。
或者改一下这个语句: ss += string.Format("{0} ",data3[i]);
这样你可以比较清楚的看到你收到的是哪些数据。 --------------------编程问答--------------------
引用 11 楼 unrealf 的回复:
不是所有的数据都能转换成可见字符串的,不要纠结于非要看到字符串撒。
就像你用记事本打开二进制文件(比如说exe文件),显示的可能就是一些乱码。
如果你能控制服务端的话,把那边的发送的数据调整一下,改为发送字符串,这样你这边收到的数据就能显示了。
或者改一下这个语句: ss += string.Format("{0} ",data3[i]);
这样你可以比较清楚的看到你收到的是哪些数据。


如果用cmd连telnet是可以正常收到数据的,可是我的程序就收不到。加了个空格字符串收到的是这样。 --------------------编程问答-------------------- 上面回复循坏有个小问题,不是i=i+5,应该是i++,得到的数据如图 --------------------编程问答-------------------- 有哪位大侠知道吗? --------------------编程问答-------------------- 可能你是看不懂#11楼的回复。你在telnet得到的结果,人家是又没有写 Encoding.ASCII.GetString(data3, 0, bytes),自然没有编码问题。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,