踩坑笔记(三) C# TcpClient类读取Response信息

有关Socket-Tcp通信的坑..


一般C#编写Tcp客户端有两种方法对应两个类

1. Socket

C#的socket类创建后直接Connect方法就可进行连接,使用Send发送信息,Receice接收信息,或者采用流操作,获取socket的NetworkStream,发送信息改为将数据写入流中,接收信息改为从流中读取数据

下边是重点…

2. TcpClient

连接的代码就像下图一样没啥好说的…
Tcp创建连接并发送信息
接收数据的代码按理说应该直接从流里读出来就好了就像下图一样
读取数据
然后出事了,异常信息为 “该流不支持查找功能”,我最开始以为是获取的流出了问题,查看了一下GetStream()的描述,如下图

API描述
翻译成人话就是,返回一个支持发送接收数据的网络流,这就很奇怪了,这不是写着支持接收数据吗…百度查了一下,一般的解决办法是使用循环将NetStream转换为MemoryStream内存流,我个人才用了CopyTo()

流转换
这里的话因为一般接收数据是开一个线程持续扫描然后向外读取数据,所以不建议使用异步方法容易造成混乱,但是很不幸当代码执行到read语句的时候还是阻塞在那里了…造成整个程序卡死

我查了半天也没查出解决办法,只能换用Socket进行通信了,所以这里建议大家,如果做客户端的数据接收还是要使用Socket,因为一般服务端接收数据都是采用TcpListener进行指定端口的监听,但是客户端一般来说自己是不知道开了哪个端口进行通信的(除非指定端口进行通信),所以一般无法开启监听,只能持续扫描然后从流中读取数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值