【发布时间】:2014-06-02 12:56:20
【问题描述】:
我有一个异步服务器套接字正在监听某个端口。然后从另一台电脑连接到服务器并发送 1 个字节。一切正常,但有一个奇怪的行为。当我拉出网络电缆并尝试发送 1 个字节(在操作系统意识到电缆被拉出之前)时,我没有收到任何异常/错误,并且正如预期的那样,服务器没有收到该数据包。这是套接字应该如何工作的吗?这是否意味着在连接丢失的情况下,一些数据包可能会丢失(因为我没有收到异常并且不知道没有发送请求)? 代码如下:
private void button3_Click(object sender, EventArgs e)
{
var b = new byte[1] {1};
client.BeginSend(b, 0, b.Length, 0, new AsyncCallback(SendCallback), client);
}
private void SendCallback(IAsyncResult ar)
{
Socket client = (Socket)ar.AsyncState;
int bytesSent = client.EndSend(ar);
this.Invoke(new MethodInvoker(() => { MessageBox.Show(bytesSent.ToString() + " bytes sent"); }));
}
【问题讨论】:
-
你有回电吗?如果您重新插入网络电缆,它最终会传送数据吗?你等了多久?
-
是的,调用了 SendCallback。插入数据线后数据未发送
-
那么你的回调中
bytesSent的值是多少?
标签: c# sockets asyncsocket