C#套接字发送错误
问题描述:
我有这样的代码C#套接字发送错误
public static void Send(Socket socket, byte[] buffer, int offset, int size, int timeout)
{
int startTickCount = Environment.TickCount;
int sent = 0; // how many bytes is already sent
do
{
if (Environment.TickCount > startTickCount + timeout)
throw new Exception("Timeout.");
try
{
sent += socket.Send(buffer, offset + sent, size - sent, SocketFlags.None);
}
catch (SocketException ex)
{
if (ex.SocketErrorCode == SocketError.WouldBlock ||
ex.SocketErrorCode == SocketError.IOPending ||
ex.SocketErrorCode == SocketError.NoBufferSpaceAvailable)
{
// socket buffer is probably full, wait and try again
Thread.Sleep(30);
}
else
throw ex; // any serious error occurr
}
} while (sent < size);
}
形式打开时,我送它和关闭:
开放时间:
Launcher.Send(sock, Encoding.UTF8.GetBytes("Hello world"), 0, "Hello World".Length, 1000);
它工作的很好,但在形式关闭:
try
{
Launcher.Send(s, Encoding.UTF8.GetBytes("Bye world"), 0, "Bye world".Length, 1000);
}
catch
{
Message.Error("Error");
}
我总是得到Erro r消息。那里有什么问题?谢谢advace
编辑:
我已删除的try {}赶上{}。现在我越来越:无法访问处置对象。对象名称:'System.Net.Sockets.Socket'。我不知道问题在哪里,因为如果我删除套接字发送应用程序加载,然后关闭工程
答
Socket.Close结束调用。
您在您的评论中提到,上面,你正在运行这段代码:
foreach (Socket s in samp)
{
Launcher.Send(s, Encoding.UTF8.GetBytes(GetMyIP()), 0, GetMyIP().Length, 1000);
s.Close();
}
因此,通过关闭窗体时,插座布置。
“我总是得到错误信息” - *什么*错误信息? –
我被删除尝试{} catch {}。现在我越来越:无法访问处置对象。对象名称:'System.Net.Sockets.Socket'。我不知道问题在哪里,因为如果我删除套接字发送应用程序加载,然后关闭作品 –
@JonSkeet我已更新我的问题 –