У меня есть асинхронный клиент-сервер, на котором данные отправляются туда и обратно.Последовательность успешно завершается и соответствующим образом закрывает сокетное соединение в первый раз.По нажатию кнопки та же последовательность должна произойти.Однако иногда возникает 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);
}