C# socket.Receive 总是延迟几秒的问题

ljupin 2019-12-05 07:36:48
启动socket监听第三方发来的消息,无论数据包大小,那怕只有10个byte, socket.Receive 要等N秒后才完成

举例代码

Console.WriteLine("准备接收数据");
clientsocket.Receive(bytes); ---- >这里总是需要固定的N秒,无论数据包大小
Console.WriteLine("接收完成数据");


有知道到底怎么回事吗?
...全文
8207 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
datafansbj 2020-12-21
  • 打赏
  • 举报
回复
Receive 本身就是阻塞的,是同步方法,当收到数据时返回,否则一直阻塞在那里,除非 client 端连续不断地发送大量数据。你可以从 client 端入手测试,连续发送大量数据给服务端,看看服务端是什么情况。
  • 打赏
  • 举报
回复
一个写出的代码不可能超出其认知范围之外。review 你代码说明了问题,一定要写代码去测试、去打破常规为准,不要以自己“认为的”为准。
  • 打赏
  • 举报
回复
引用 4 楼 ljupin 的回复:
[quote=引用 1 楼 Eason0807 的回复:]
如果排除网络因素的话,你是不是在其他地方阻塞工作线程了


就这3行代码,前后打印输入时间固定差10秒,阻塞的话也是在其他阻塞吧?

单纯的用代码写个服务端和客户端,没有阻塞,就是服务端接收来自第三方的数据时,总这样[/quote]

不是什么“没有阻塞”,是你的程序逻辑本身就是阻塞。服务器阻塞你没有贴出来,客户端阻塞一目了然,否则(如果真是没有阻塞则)你的“接收完成数据”这几个字儿据应该在你接收到数据之前就打印出来,因为你的代码体现出不会异步编程,所以自己认为“没有阻塞”也没法落实啊?!
  • 打赏
  • 举报
回复
一般来说,只有课堂练习才用阻塞语句。编写实用程序要用异步多线程的语句。
gs0038 2020-12-18
  • 打赏
  • 举报
回复
上点关键性的代码吧,看不懂,不知道,不清楚
crazy283 2020-12-18
  • 打赏
  • 举报
回复
我的会有9秒左右延时,和你差不多,但是不知道是啥原因
ljupin 2019-12-06
  • 打赏
  • 举报
回复
引用 1 楼 Eason0807 的回复:
如果排除网络因素的话,你是不是在其他地方阻塞工作线程了
就这3行代码,前后打印输入时间固定差10秒,阻塞的话也是在其他阻塞吧? 单纯的用代码写个服务端和客户端,没有阻塞,就是服务端接收来自第三方的数据时,总这样
ljupin 2019-12-06
  • 打赏
  • 举报
回复
引用 2 楼 by_封爱 的回复:
这个N秒你是如何得到的?
第一个输出准备接收 第二个输出接收完成 2个者打印的时间总是差10秒
by_封爱 版主 2019-12-06
  • 打赏
  • 举报
回复
这个N秒你是如何得到的?
Eason0807 2019-12-06
  • 打赏
  • 举报
回复
上代码吧,这没法猜!!
Eason0807 2019-12-05
  • 打赏
  • 举报
回复
如果排除网络因素的话,你是不是在其他地方阻塞工作线程了

110,534

社区成员

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

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

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