Проверьте, подключен ли сокет, перед отправкой данных. - PullRequest
2 голосов
/ 22 октября 2009

Я использую супер-простые синхронные сокеты 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 на моем объекте сокета?

1 Ответ

1 голос
/ 22 октября 2009

Вы можете и, вероятно, должны обрабатывать более одного одновременного соединения. Просто вызовите accept в цикле и отправьте клиентов в отдельные потоки. Я полагаю, что вы используете только один поток, поэтому, когда сервер занят одной клиентской попыткой соединения, время ожидания на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...