草庐IT

BeginSend

全部标签

c# - 异步写入套接字线程安全吗?

考虑Socket.BeginSend()方法。如果两个线程池线程同时调用此方法,它们各自的消息最终会相互混合还是套接字类会阻止这种情况发生? 最佳答案 .NETSocket实例不是线程安全的,因为同时调用某些方法(相同或不同的方法)可能会导致状态不一致。但是,BeginSend()和BeginReceive()方法本身是线程安全的。对每个(或两者)进行多次未完成调用是安全的。在BeginReceive()的情况下,当数据以调用的顺序可用时,它们将被服务。例如,如果您的处理时间很长,但您希望其他接收尽快发生,这将很有用。当然,在这种情

c# - 为什么在调用 Socket.BeginSend 后我的发送回调执行得如此之快?

当我向远程机器发送大量数据时,发送回调几乎立即执行。[05:10:35:981]ChildSocket.Send():Sending1048508bytes.[05:10:35:988]ChildSocket.SendCallback():Sent1048508bytes.我的网速不可能在7毫秒内成功发送近1兆字节。由于这种行为,我的印象是调用BeginSend只是将发送缓冲区写入操作系统,操作系统会在适当的时候发送它。这种怀疑是否正确?为什么发送回调执行得这么快? 最佳答案 是的,操作系统会缓冲数据(尽管1MB似乎很多)。Send

c# - C#TCP异步BeginSend回调永远不会发生

我正在开发一款与C_统一的游戏,并使用TCP在服务器和客户机之间交换数据。我正在使用异步调用进行连接,这似乎可以正常工作。然后,当服务器提示客户端提供客户端版本、客户端回复、服务器询问播放机名称、播放机回复时,会发生握手/身份验证,如果一切正常,则服务器通知客户端已被接受,否则连接将关闭。大部分时间都是这样。然而,在大约20分之一的时间里,对于第一个消息(服务器->客户端版本请求,游戏开始后几秒钟内),第一个beginsend的异步回调永远不会被调用,从而停止了身份验证过程。客户机确实根据我已经准备好的日志接收消息,并通过调试进行验证。服务器的调用是:m_isSending=true;