Winsock в VB.net не работает - PullRequest
       30

Winsock в VB.net не работает

1 голос
/ 29 января 2011

Привет всем, я пытаюсь получить этот код, который работал в VB6, просто отлично работает в VB.net 2008. Кажется, он не хочет подключаться (но не имеет ошибки после того, как он проходит sockMain.Connect ( ) .

sockMain.RemoteHost = "192.168.1.77"
sockMain.RemotePort = 77
sockMain.Connect()

Теперь, когда я делаю это:

On Error GoTo oops
    sockMain.SendData(txtSend.Text)

oops: 
    If Err.Number = 40006 Then
        MsgBox("It doesnt seem that the server is running. Please check it and try again")
    End If

Я получаю Не похоже, что сервер работает. Пожалуйста, проверьте это и попробуйте снова. ошибка.

Что мне не хватает ??

David

Ответы [ 3 ]

4 голосов
/ 29 января 2011

Как я объяснил в комментарии, VB.NET и VB 6 - это почти совершенно разные языки программирования.Вы не делаете себе одолжений, пытаясь написать код VB 6 в VB.NET.Нет никакой причины для миграции, если вы не собираетесь использовать преимущества новых функций, предоставляемых платформой .NET.

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

Попробуйте заменить то, что у вас есть, на что-то вроде следующего кода:

Dim tcpClient As New System.Net.Sockets.TcpClient()
tcpClient.Connect("192.168.1.77", 77)
Dim networkStream As NetworkStream = tcpClient.GetStream()
If networkStream.CanWrite And networkStream.CanRead Then
    ' Do a simple write.
    Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
    networkStream.Write(sendBytes, 0, sendBytes.Length)

    ' Read the NetworkStream into a byte buffer.
    Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

    ' Output the data received from the host to the console.
    Dim returnData As String = Encoding.ASCII.GetString(bytes)
    Console.WriteLine(("Host returned: " + returnData))
Else
    If Not networkStream.CanRead Then
        Console.WriteLine("Cannot not write data to this stream. " &
                          "Please check the server and try again.")
        tcpClient.Close()
    Else
        If Not networkStream.CanWrite Then
            Console.WriteLine("Cannot read data from this stream. " &
                              "Please check the server and try again.")
            tcpClient.Close()
        End If
    End If
End If
1 голос
/ 29 января 2011

Если вы хотите почувствовать winsock vb6 в мире .net, попробуйте this , имейте в виду, что он не обновлялся с 2008 года, и есть несколько ошибок, посмотрите комментарий в конце статьи длябольше информации

0 голосов
/ 29 января 2011

Вызов Connect может занять некоторое время. Даже если ваш клиент установил физическое соединение с сервером, вы должны дать ему немного времени для установки виртуального канала TCP. Если вы установите точку останова для вызова SendData и подождете секунду или две, а затем продолжите, вы, вероятно, обнаружите, что он работает нормально.

...