Visual Basic 6의 컨트롤을 .NET에서 사용할 때... 예:WinSock 책 읽는 소프트웨어개발자

비주얼 베이직을 쓸 때 가장 편리한 것 중에 하나는 소켓 통신(Winsock)입니다. 몇 줄만 짜면 원하는 통신이 이루어지므로, 잠깐 테스트해볼 때 너무나 좋습니다.

물론, 요즘에는 잘 필요하지 않지만^^

비주얼 베이직이 .NET으로 넘어오면서 시스템 상에서 소켓을 지원하게 되었습니다.(Imports System.Net.Sockets) 하지만, 편리함도 무시할 수 없고 계속 사용할 것도 아니기 때문에, 과거에 VB6에 쓰던 윈속을 쓰고 싶었습니다.

첫번째 문제는 “프로젝트” -> “참조추가”를 통해서, 어떻게든 구한 VB6.0 SP5용 MSWINSCK.OCX을 등록을 해도 [디자인]을 할 때 좌측의 “도구 상자”의 “일반”항목에는 아무런 컨트롤이 안생긴다는 것입니다!!!

이것은 유투브에 동영상도 나와있듯이, 비주얼 베이직 2008의 “도구”메뉴에서 “도구 상자 항목 선택”을 클릭한 후, “COM 구성 요소” 탭을 누른 후, “Microsoft WinSock Control, version 6.0″을 체크 표시해주면 됩니다.

두번째 문제는 비주얼 베이직6와 달라진 부분인데 간단하므로, 아래에 샘플 코드로 대체합니다^^ 나머지는 비슷합니다.

Private Sub AxWinsock1_ConnectionRequest(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles  AxWinsock1.ConnectionRequest
    AxWinsock1.Close()
    AxWinsock1.Accept(e.requestID) ' VB6와 달리 e.을 덧붙여 준다. 
End Sub

Private Sub AxWinsock1_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles AxWinsock1.DataArrival
    Dim byteData() As Byte
    Dim strData As String
    byteData = Nothing ' Warning을 없애기 위하여... 
    AxWinsock1.GetData(byteData)
    strData = System.Text.Encoding.ASCII.GetString(byteData)  ' MSDN참조
End Sub

* 추가: 아래에 댓글을 달아주신 것처럼, VB6의 Winsock을 굳이 위와 같이 쓰는 것은 좋은 선택이 아니라는데 동의합니다. VB6에 있었는데 .NET에는 더 이상 지원되지 않는 것이어서 어쩔 수 없이 쓰는 거라면 이야기가 다르겠지만 말이지요. 원래는 그런 이유 때문에 작성한 글인데, Winsock을 예로 든 것은 적절하지 않았다는 생각이 듭니다^^ 

덧글

  • 게드 2012/01/18 16:45 # 답글

    시스템 Socket을 쓰시는게 낫습니다..
    Connect, Send, Receive 만으로 처리 가능합니다..
  • 무재칠시 2012/01/18 20:11 #

    ^^ 예 맞습니다. 게으르니즘으로 인해 시스템 소켓 사용법은 찾다가 말았지요.
  • 게드 2012/01/18 21:29 #

    객체 선택하고 F1만 눌러도.. MSDN에 예제가 잘 나옵니다 orz
  • 무재칠시 2012/01/23 16:19 #

    옙^^
댓글 입력 영역