Проблема с соединением в win7 с использованием программирования сокетов vb.net - PullRequest
1 голос
/ 02 января 2012

Я использую программирование сокетов в vb.net для создания удаленного клиентского приложения.Проблема возникает, когда я использую как клиента, так и сервера в win 7 box.Он отлично работает для win xp или кроссплатформенного общения (например, win xp to win 7).Ниже приведены коды, используемые на стороне клиента и сервера:

Клиент:

Dim ips As IPAddress() 

ips = Dns.GetHostAddresses(HostName)

For index = 0 To ips.Length - 1         

Next index

================================================================

private sub sendFile(byval ip as string)

Dim client As TcpClient = Nothing client = New TcpClient(ips(index).ToString, 8000) 

    'Code to send file

End sub

Сервер:

Dim Listener As TcpListener = Nothing
Listener = New TcpListener(IPAddress.Any, 8000)
Listener.Start()

 Dim client As TcpClient = Nothing
        Dim netstream As NetworkStream = Nothing

                If Listener.Pending() Then
                client = Listener.AcceptTcpClient()
                netstream = client.GetStream()

При запуске клиента и сервера на win 7 выдается следующее сообщение:

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

Пожалуйста, помогите мне выяснить, в чем проблема.Это уровень разрешений, который имеет win 7?

Ответы [ 2 ]

0 голосов
/ 13 января 2012

Ниже приведена проблема и решение для нее:

  1. Проблема:

    Win 7 поставляется с ip v6.Поэтому всякий раз, когда мы используем Dns.GetHostAddresses (hostname), он возвращает все ip-адреса, связанные с хостом (оба ip v4 и ip v6).Использование этого адреса ip v6 с функциями для совместимости с ip v4 создает проблему.

  2. Решения:

    При использовании Dns.GetHostAddresses (hostname) проверьтедля ip v4.

    if (ObjTemp.AddressFamily.ToString() == ProtocolFamily.InterNetwork.ToString())
    

Надеюсь, это поможет другим, работающим над программированием сокетов.:)

0 голосов
/ 02 января 2012

Если вы подумаете о том, чтобы сделать это в c #, вы проверили среду взаимодействия с открытым исходным кодом, networkComms.net? Нет смысла пытаться изобретать велосипед.

...