Я пытаюсь лучше понять C# классы сокетов. Я работаю с объектом TcpClient. Я использую его в проекте Unity (разработка игр), поэтому я не могу заблокировать основной поток. Я хотел бы использовать метод с формой Begin / End, как, например, BeginConnect () и EndConnect ().
Я делаю это:
public class TcpTest : MonoBehaviour
{
private TcpClient m_TcpClient = null;
private void Start()
{
m_TcpClient = new TcpClient();
m_TcpClient.BeginConnect("127.0.0.1", 40000, OnConnectAsyncCallback, null);
}
private void OnConnectAsyncCallback(IAsyncResult i_AsyncResult)
{
m_TcpClient.EndConnect(i_AsyncResult);
MyAsyncDebug.Log("Connect callback received.");
}
}
Я использую hercules как инструмент для отладки сокетов. Я запустил TCP-сервер с ним, и все было хорошо. Затем я остановил TCP-сервер на Hercules. Я перезапустил свой код и ожидал ошибку или исключение. Ничего, код просто запускает BeginConnect () и AsyncCallback больше не вызывается. Я также пытался запустить сервер после того, как был вызван метод BeginConnect, но он не работает.
Как узнать, произошел ли сбой в Begin Connect (возможно, пункт назначения недоступен или по какой-либо другой причине)?
Я не могу понять, как они устроены (я уже читал документы MSDN).
Спасибо и извините за новый ie вопрос!