gpt4 book ai didi

c# - Socket.Send 最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:00 27 4
gpt4 key购买 nike

我正在尝试改进我们的一些网络代码,这里我需要使用 Socket.Send

但是,MSDN 指出开发人员有责任处理重试,并且由于 Socket.Send 方法不需要在单个请求中发送所有数据(取决于缓冲区大小),我决定采用以下方法循环:

try
{
int timeout = TimeSpan.FromSeconds(10).Milliseconds;
int waitTime = TimeSpan.FromMilliseconds(30).Milliseconds;

Socket socket = tcpClient.Client;
socket.SendTimeout = timeout ;

int offset = 0;

while (offset != data.Length)
{
if (socket.Poll(waitTime , SelectMode.SelectWrite))
{
offset += socket.Send(data, offset, data.Length - offset, SocketFlags.None);
}
}
}
catch (SocketException)
{
tcpClient.Close();
}

但是,我不确定偏移量,因为它是从零开始的,这可能会导致偏移量在此处的每个循环中丢失一个字节,或者我错了吗?

此外,这里还有其他需要关注的最佳实践吗?

最佳答案

MSDN 文章说:

Return Value Type: System.Int32 The number of bytes sent to the Socket.

所以我不会担心。我对最佳实践的唯一建议是考虑使用 WCF,它比 .NET 中的套接字更易于使用且更可靠,尤其是对于任何复杂的东西。

关于c# - Socket.Send 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8801832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com