我有一个异步客户端服务器,在该服务器中来回发送数据。该序列成功完成,并在第一次时适当关闭套接字连接。单击按钮,应发生相同的顺序。但是,当客户端在第一次运行后尝试将数据发送到服务器时,有时会发生SocketException。
我在建立连接时是否做错了什么,是否与时间有关,还是我遗漏了其他东西会导致错误?
我添加了_baseSocket.Poll()来解决此问题。它的确提高了性能,但是最终还是由于重复该过程最终导致崩溃错误,主要是因为我单击按钮的速度太快才能重新启动过程。如果我有断点,它每次都可以工作。我尝试添加一些时间延迟,但这也没有解决此问题。
主要WPF表单
private void connectCallback(object sender, string error)
{
if(!Dispatcher.CheckAccess())
{
Dispatcher.Invoke(new ConnectCallback(connectCallback), sender,
error);
return;
}
}
OtherClass
public void Connect(string hostName, int port, ConnectCallback callback)
{
_connectCallback = callback;
_baseSocket.BeginConnect(hostName, port, connectCallback, null);
}
private void connectCallback(IAsyncResult ar)
{
string error = null;
try
{
_baseSocket.EndConnect(ar);
EndPoint = (IPEndPoint)_baseSocket.RemoteEndPoint;
}
catch(Exception ex)
{
error = ex.Message;
}
_connectCallback(this, error);
}
public void Send(string data, int bufferSize)
{
byte[] bData = Encoding.ASCII.GetBytes(data);
byte[] sendBuffer = new byte[bufferSize];
bData.CopyTo(sendBuffer, 0);
_baseSocket.Poll(10, SelectMode.SelectWrite);
_baseSocket.sendBuffer, 0, sendBuffer.Length, SocketFlags.None, new
AsyncCallback(SendCallback), _baseSocket);
}