Поток для тестирования Tcp Ошибка подключения - PullRequest
0 голосов
/ 03 января 2011

Я пытаюсь проверить Socket Connection.Отображается ошибка

Невозможно получить доступ к удаленному объекту.Имя объекта: 'System.Net.Sockets.TcpClient'.

при подключении (ip, порт).

       System.Net.Sockets.TcpClient client = new TcpClient();
        try
        {
            System.Threading.Thread t = new System.Threading.Thread(() =>
        {
            client.Connect(ip,port );

        });
            t.Start();
        }
        catch (SocketException ex)
        {


        }
        catch (Exception ex) {

        }
        finally
        {
            client.Close();
        }

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Это условие состязания между потоком, который вы запускаете здесь:

    System.Threading.Thread t = new System.Threading.Thread(() =>
    {

        client.Connect(ip,port );

    });
    t.Start();

и блоком окончаний здесь:

    finally
    {
        client.Close();
    }

В этом случае основной поток достиг блока, завершенного ранееВаше соединение было завершено.

Создание и очистка объектов действительно должны выполняться в одном потоке, поэтому попробуйте что-то подобное, если только вам действительно не нужно закрытие.

System.Threading.Thread t = new System.Threading.Thread(() =>
{
    using(TcpClient client = new TcpClient())
    {
        client.Connect(ip, port);
        //followup code here
    }

});
t.Start();
2 голосов
/ 03 января 2011

В зависимости от того, чего вы пытаетесь достичь, вы можете изменить код на

System.Threading.Thread t = new System.Threading.Thread(() =>
                {
                    using (System.Net.Sockets.TcpClient client = new TcpClient())
                    {
                        client.Connect("127.0.0.1", 80);
                        // Communicate with the Server. 
                    }   // The client object would be disposed here
                });
                t.Start();

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

...