2011-01-29 17 views
1

ちょっと、VB6で動作するこのコードをVB.net 2008で動作させようとしています。接続したくないようですが(エラーはありません。 sockMain.Connect()VB.netのWinsockは動作しません。

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 

を私はを取得するには、それを確認して、もう一度試してくださいサーバーが動作しているように見えるdoes notのエラー。 。

何が欠けていますか?

デビッド

+0

のためacticleの最後にコメントを見てみたい場合最初に欠けているのは、VB 6とVB.NETが、まったく異なる言語であり、表面的には似通った構文しかないことです。つまり、構造化された例外処理( 'try' /' catch')が利用できるようになったため、VB.NETでは 'On Error GoTo'は* more *になりました。良い本を手に入れ、.NETの慣用句だけでなく、オブジェクト指向のプログラミングも学びます。 VB 6からVB.NETへの再書き込みは、実際にやってみる価値があるので、あなたは長期的には大きな好意を持っています。 –

答えて

4

私はコメントで説明したように、VB.NETやVB 6は、ほぼ完全に異なるプログラミング言語です。あなたはVB.NETでVB 6のコードを書こうとすることによって、自分自身に何の恩恵も与えていません。 .NETプラットフォームで提供される新機能を利用しない場合は、移行する必要はありません。

すでに言及した構造化された例外処理以外にも、古いWinSockコントロールには、System.Net.Sockets namespaceにあるクラスが優先されます。

は、次のコードのようなものでなければならないものを交換してみてください:

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 
0

接続コールが完了するまでに少し時間がかかる場合があります。クライアントがサーバに物理的に接続した場合でも、TCP仮想回線を確立する間にクライアントにそれを与える必要があります。 SendDataへの呼び出しにブレークポイントを設定し、わずか2〜2秒待ってから続行すると、おそらく正常に動作することがわかります。

1

は、.NETの世界でVB6のWinsockの感が、thisを試し、それは2008年から更新されませんでしたし、いくつかのバグがある注意してください、より多くの情報

関連する問題