Я использую супер-простые синхронные сокеты C # для назначения. Назначение заключается в создании одноранговой программы чата, поэтому каждый экземпляр должен работать как клиент и сервер. Моя программа прекрасно работает, когда я переключаю ее в режим прослушивания: (StateBall - это объект, который передает переменные состояния вокруг)
public void startListening()
{
lState = new StateBall();
IPEndPoint peer = new IPEndPoint(StateBall.host, StateBall.port);
lSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
try
{
lSocket.Bind(peer);
lSocket.Listen(10);
Console.WriteLine("Waiting for a connection...");
StateBall.updateText("Waiting for a Connection...");
client = lSocket.Accept();
StateBall.toSend=StateBall.ourName;
StateBall.updateText("Connection made! Sending our name...");
...
Но когда я пытаюсь запустить второй экземпляр и подключиться к уже запущенному экземпляру, он просто зависает и не подключается.
Из того, что я видел на этом сайте и в остальной части Интернета, я мог проверить уже существующее соединение, используя что-то вроде:
try{
lsocket.Connect(peer);
}
catch(Exception ex){
//check for SocketException type and errors
}
А затем продолжите с моей программой, но есть ли чистый способ интегрировать эту начальную проверку в уже существующий код? Или есть лучший способ проверить активный хост перед попыткой вызова Connect на моем объекте сокета?