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

夏日冬瓜茶 2013-09-17 03:09:06
各位大侠,我在测试一段非常简单的代码。发送命令都正常,但文本框怎么都显示不了数据。这是怎么回事啊,我是新手啊,求助求助~~~


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;
...全文
830 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可能你是看不懂#11楼的回复。你在telnet得到的结果,人家是又没有写 Encoding.ASCII.GetString(data3, 0, bytes),自然没有编码问题。
夏日冬瓜茶 2013-09-22
  • 打赏
  • 举报
回复
有哪位大侠知道吗?
oYanSiDeYu123456 2013-09-18
  • 打赏
  • 举报
回复
你发送数据的格式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是你实际接收到的长度,可以加断点看看
夏日冬瓜茶 2013-09-18
  • 打赏
  • 举报
回复
楼上大侠,具体我的代码应该怎么改动一下才能正常显示字符呢?
夏日冬瓜茶 2013-09-18
  • 打赏
  • 举报
回复
上面回复循坏有个小问题,不是i=i+5,应该是i++,得到的数据如图
夏日冬瓜茶 2013-09-18
  • 打赏
  • 举报
回复
引用 11 楼 unrealf 的回复:
不是所有的数据都能转换成可见字符串的,不要纠结于非要看到字符串撒。
就像你用记事本打开二进制文件(比如说exe文件),显示的可能就是一些乱码。
如果你能控制服务端的话,把那边的发送的数据调整一下,改为发送字符串,这样你这边收到的数据就能显示了。
或者改一下这个语句: ss += string.Format("{0} ",data3[i]);
这样你可以比较清楚的看到你收到的是哪些数据。


如果用cmd连telnet是可以正常收到数据的,可是我的程序就收不到。加了个空格字符串收到的是这样。
unrealf 2013-09-18
  • 打赏
  • 举报
回复
不是所有的数据都能转换成可见字符串的,不要纠结于非要看到字符串撒。 就像你用记事本打开二进制文件(比如说exe文件),显示的可能就是一些乱码。 如果你能控制服务端的话,把那边的发送的数据调整一下,改为发送字符串,这样你这边收到的数据就能显示了。 或者改一下这个语句: ss += string.Format("{0} ",data3[i]); 这样你可以比较清楚的看到你收到的是哪些数据。
jiaoshiyao 2013-09-18
  • 打赏
  • 举报
回复
引用 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 你这样的代码很慢。。。
unrealf 2013-09-17
  • 打赏
  • 举报
回复
额 上面看错了 你输出的可能不是13,01,有可能是1,3,0这样的数据。遇到0的话字符串就结束了,如果在0之前没有可见字符的话,你在文本框就看到东西了。
unrealf 2013-09-17
  • 打赏
  • 举报
回复
你的数据不能正确的转换为string 看你贴的图,13是换行,01是不可见字符 文本框看不到数据应该就是这个原因了
夏日冬瓜茶 2013-09-17
  • 打赏
  • 举报
回复
可以看得到收到了数据啊,我换了几行代码输出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;
unrealf 2013-09-17
  • 打赏
  • 举报
回复
在 Int32 bytes = stream1.Read(data3, 0, data3.Length); 这句加个断点看下撒, 如果你的程序没有抛出异常,顺利的到了这一步,检查下bytes的值,如果为0,则表示服务端没给你发数据
feiniao19830822 2013-09-17
  • 打赏
  • 举报
回复
你到网上下个工具,抓数据包,看看设备有没有发送数据给你
夏日冬瓜茶 2013-09-17
  • 打赏
  • 举报
回复
不是啊,我就是做一个客户端,连到一个telnet设备上,执行完命令这个设备会有返回值啊。
dota_371581 2013-09-17
  • 打赏
  • 举报
回复
接收怎么也得用 TCPListener吧。。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧