首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#制作TcpServer块

c#制作TcpServer块
EN

Stack Overflow用户
提问于 2014-10-20 07:39:49
回答 3查看 78关注 0票数 1

我使用C#来制作服务器和客户端。我希望它能阻止我所做的事情。当我使用NetworkStream.read()时,它会阻塞,我喜欢这样。问题是,当我使用NetworkStream.ReadByte()时,它不会阻塞。相反,当没有传入字节时,它会返回-1。如何使NetworkStream.ReadByte()像NetworkStream.read()那样阻塞?

我试图将NetworkStream.ReadByte()包含在NetworkStream.DataAvailable中,但这也不起作用。我只是wantNetworkStream.ReadByte()来阻止。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-20 07:41:50

为什么不直接使用:

代码语言:javascript
复制
byte[] buf = new byte[1];
stream.Read(buf, 0, 1);

编辑:当然,如果您经常这样做,不要每次都分配新的缓冲区,将其存储为对象上的字段&在构造函数中分配它。

票数 0
EN

Stack Overflow用户

发布于 2014-10-20 08:20:33

ReadByte块。它只在流的末尾返回-1。你一定是误解了你看到的东西。将ReadByte替换为nevelis建议的解决方案,您将不会看到行为上的差异。

票数 2
EN

Stack Overflow用户

发布于 2016-02-23 11:52:07

在MSDN文档中找不到这方面的任何明确信息,但是现在我们已经拥有了开源CoreFX,我们可以查看实现:

https://github.com/dotnet/corefx/blob/1bd332f2e5f559c2eab276acb0d9e4256085ec2f/src/System.Net.Sockets/src/System/Net/Sockets/NetworkStream.cs

https://github.com/dotnet/corefx/blob/1bd332f2e5f559c2eab276acb0d9e4256085ec2f/src/System.IO/src/System/IO/Stream.cs

NetworkStream重写对正在阻塞的Socket.Receive的读取调用,但不覆盖ReadByte。Stream.ReadByte只是调用Read,所以NetworkStream.ReadBytes将调用阻塞NetworkStream.Read。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26460616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档