2007년 05월 08일
vb winsock 이용한 기본 채팅프로그램 (서버/클라이언트)
네트워크 프로그래밍 -NewVer-
작성자 : 김동민()
======================================================================
목 표 : 네트워크 프로그래밍 -New Version-
강 좌 : 김동민 (2000.01.15)
연락처 : HiTel ID : real21c
E-Mail : real21c@hitel.net
HomePage : http://my.netian.com/~real21c
이 강좌를 다른곳에 올려주실때에는 원본그대로를 올려주세요.
혹시 틀린것이 있거나, 질문이 있으시면 위의 연락처로 맬 보내주세요.
======================================================================
안녕하세요? 김동민입니다. 어떤분의 요청으로 강좌를 다시 쓰게 되는군요!
이번 강좌는 이전의 강좌보다, 더욱더 쉽고 자세하게 쓰였습니다. 그래서 그런지
말도 많아지고, 용량도 커지는 군요.. ^^;
이제는 모든세상이 인터넷으로 다 통합될것이고, 세계도 점점 이제 작아질것입니
다.요즘 두룻넷이나, ADSL 등.. 이런것만 봐도 알수 있겠죠... ^^;
프로그램도 이제는 이런 시대에 맞춰서, 인터넷, 웹, 네트워크 등의 기술을 이용
한프로그램을 만들어야 승산이 있을것입니다..
그래서 이번에는 Visual Basic을 이용해서 네트워크 프로그래밍을 배워보죠!
참고로 이 강좌는 5.0, 6.0 다 됩니다. (4.0은 잘 모르겠군요..)
① 네트워크 프로그래밍?
네트워크 프로그램은 어떤게 있을까요? 이것도 생각하기 나름이겠지만, 기존
에 나와있는것들은 채팅이나, 원격제어 등... 이런것들이 있죠..
그중에서 1:1채팅프로그램을 만들어볼까 합니다.
그런데 1:1채팅프로그램에 필요한것이 있습니다. Microsoft에서 제공해주는
Winsock이라는 컨트롤(OCX)입니다. 우리는 이것을 이용하여 만들수 있습니다.
이 컨트롤은 소켓의 연결, 데이터 송수신 등.. 의 역활을 해줍니다.
채팅이라는 프로그램은 어렵지않습니다. 이제 여러분은 따라하시기만 하면 됩
니다!
② 하기 전에...
하늘사랑(SKYLOVE)라고 아시겠죠?? 이거 모르시면 갑첩?
만약 아신다면 한번이상은 접속해보셨을것입니다.. 즉, 제가말하고자 하는것
은 서버, 클라이언트입니다..
서 버 - 하늘사랑(하이텔, 천리안, 나우누리 등...)
클라이언트 - 여러분! (서버에 접속하는 사용자들...)
이번에 만들고자 하는 1:1채팅프로그램도 서버와, 클라이언트가 있어야 겠죠.
즉 프로그램이 두개 있어야 한다는것입니다. 서버프로그램과, 클라이언트 프
로그램, 전 프로그램을 따로따로 만들어서 여러분에게 자세히 가르쳐 드리겠
습니다! 하지만, 여러분의 실력을 전 믿습니다.. 이 강좌에서 끝나시지 마시
고, 여러분들 께서 직접 서버, 클라이언트 프로그램을 합치시기 바랍니다. 하
나의 프로그램에서 서버와, 클라이언트가 가능한 프로그램.. ^^;
③ Winsock Control?
먼저 코딩전에 알아둘것이 있습니다. Winsock의 컨트롤의 이벤트와 속성들...
a,b,c를 먼저배우고 단어를 배우듯이 우선 이벤트와 속성을 먼저 알아보도
록 합시다!
[참고]
Winsock 컨트롤은 TCP/IP프로토콜과, UDP프로토콜을 지원합니다.
TCP/IP는 큰 데이터를 보낼수 있고, 안정적이지만 UDP는 그렇지 못합니다.
그리고 TCP/IP는 인터넷 표준 프로토콜이신거 아시죠??
즉 전 세계 어디든지, 인터넷이 가능한곳이라면 바로 연결가능합니다.
이번에 만들 1:1채팅프로그램 역시 TCP/IP프로토콜을 이용하여 만들것입니
다. 그래서 이벤트와 속성도 TCP/IP만을 설명하겠습니다.
[이벤트]
Close
이것은 소켓이 닫힐때 생성됩니다. 즉 연결이 끊어질때일어나는 일
어나는 이벤트죠.
Connect
이것은 서버에 연결될때 일어납니다. 즉 연결을 하는 클라이언트에
만 일어나는 이벤트입니다.
ConnectionRequest
이것은 클라이언트가 접속될때 일어납니다. 이것은 Client와 반대로
서버에만 일어나는 이벤트입니다.
DataArrival
이것은 서버/클라이언트 모두 일어나는 이벤트입니다. 이것은 서로
데이터를 주고받을때 일어납니다. 즉 A가 B에게 "사랑해~~"라는 메
세지를 전송했다고 합시다! 그럼 B에서는 DataArrival이벤트가 일어
납니다.
Error
단어 그대로, 에러가 날때 일어납니다. 연결이 안된다거나 등....
SendComplete
단어 그대로, 보내기가 완료될때.. 아까처럼 A가 B에게 "사랑해~~"
라는 메세지가 전송이 끝났을때 일어납니다.
SendProgress
단어 그대로, 보내기 과정이 일어날때 이벤트가 일어납니다. A가 B
에게 "사랑해~~"라는 메세지를 전송되는 과정에서 일어납니다. 큰
파일을 전송할때 매우 유용하겠죠.. 전송상황을 알아볼때..
[속성]
.Accept
이것은 서버에게만 필요한 속성입니다. 여러분이 통신망에 접속했다
고 합시다! 우선 아이디/비번을 입력하면 접속이 되죠??
이 때 서버에서는 아이디/비번이 맞는지 확인하고, 여러분의 접속을
허용합니다. 즉 여러분에게 하나의 소켓이 만들어진다고 해야 하나?
이 때, 이 허용할때 필요한 속성이 Accept입니다. B가 A로 접속할때
A가 B를 Accept해야, B가 접속을 할수 있다는 얘기입니다! ^^;
.Close
접속을 끊을때 필요한 속성입니다. 즉 통신에서 X명령으로 접속을 끊죠
.Connect
연결을 할때 필요한 속성입니다. 세롬이나, 이야기에서 ATDT로 전화를
걸때 생각하시면 됩니다.
.GetData
DataArrival 이벤트에서 주로 쓰이는 속성입니다. 즉 데이터를 받을때
필요하죠.. 이것을 DataArrival 이벤트안에다가 " sock.GetData T "
이렇게 하시면 데이터를 받을때 T라는 변수에다가 저장한다는 뜻입니다
.Listen
이것은 서버에게만 필요한 속성입니다. 서버에서 사용가능한 소켓을 대
기시킨다는 뜻인데.. 서버에서 이 소켓을 열어놔야, 클라이언트가 열린
소켓으로 접속이 가능합니다.
.LocalPort
이것은 서버에게만 필요한 속성입니다. 즉 서버의 포트를 정해야 하는
데 여러분은 1000번 이상의 포트를 이용하세요. 1000번 아래는 예약된
포트들이 많기 때문입니다. 자세하게 설명한다면 여러분이 통신망을 텔
넷으로들 어갔다고 합시다. 여러분은 그럼 23번의 포트를 사용하는것이
죠.. 여러분이 텔넷프로그램을 만든다고 하면 포트를 23으로 하시면 되
겠죠.. 이것은 여러분 임의대로 정하세요. 단 Long 범위안으로 1000이
상을 정하시면 되겠네요!
.RemotePort
이것은 클라이언트에게만 필요한 속성입니다. 이 포트는 서버에서 지정
한 포트와 똑같아야 한다는것을 명심하시길 바랍니다. 서버가 2000포트
를 사용한다면, 클라이언트 역시 2000포트를 사용하셔야 합니다!
.RemoteHost
이것도 클라이언트에게만 필요한 속성입니다. 연결하려는 서버의 IP주
소 또는 Domain Name이 들어갑니다. 연결할때 필수입니다.
.SendData
이것은 데이터를 보낼때 사용하는 속성입니다. " sock.SendData T "
하시면 T에 저장된 내용을 보낸다는 뜻입니다.
.State
이것은 현재 소켓의 상태를 점검해줄수 있습니다. 연결상태 등을 숫자
로 표시해줍니다.
④ 서버 프로그램
이제 서버를 만들어야 겠죠.. 1:1채팅프로그램의 서버역활은 무엇일까요?
방을 만드는 사람이라고 생각하시면 됩니다. 즉 방장이죠...
하지만 위의 ③을 반드시(반드시) 조금이라도 이해하셔야 합니다!
1. 우선 위에서 설명한 Winsock이라는 컨트롤을 설치해야 합니다.
설치방법은 Ctrl + T키를 누르세요! 그럼 여러가지 구성요소(OCX)들의
목록이 나옵니다. 그중 [ Microsoft Winsock Control 5.0(6.0) ]을 체
크한후 확인 버튼 누르세요. 그럼 도구모음 왼쪽의 도구상자에 보시면
컴퓨터 2대가 연결된 모양의 아이콘의 컨트롤이 추가되어있습니다.
이게 바로 Winsock(윈속) 컨트롤입니다.
2. 컨트롤만 추가하면 안돼요! 폼에다가 디자인하셔야죠... 이것은 Timer
컨트롤처럼 실행했을때, 보이지 않습니다. 그럼 폼에다가 추가하세요..
TextBox컨트롤도 2개 추가합니다.. 하나는 채팅시 화면을 보여주는 출
력 창의 역활을 할것이고, 또 하나는 채팅시 입력창의 역활을 할것입니
다. 그리고 Name속성을 다음과 같이 바꾸어 주세요.
[Name]
Winsock1 : sock
Text1 : txtMain
Text2 : txtInput
그리고 세롬이나, 기타 채팅프로그램처럼 디자인을 멋지게 꾸미세요.
이것은 여러분들의 몫입니다. 근데 몫이 맞나요?(국어를 못해요)
3. 이제 코딩만이 여러분을 기다리고 있습니다. 절대 어렵게 생각하지 마
시고, 자신감을 가지시길...
________________________________________________________________
Private Form_Load()
sock.LocalPort = 2000 '사용자 임의 포트를 정합니다.
sock.Listen '그리고 클라이언트가 접속할수 있도
'록 소켓을 열어놓습니다.
End Sub
________________________________________________________________
Private Sub sock_ConnectionRequest(Index As Integer, _
ByVal requestID As Long)
'만약 소켓이 닫혀있지 않다면, 접속을 허용합니다.
If sock.State <> sckClosed Then sock.Close
sock.Accept requestID
MsgBox "클라이언트 입장 완료!",vbInformation,"^^;"
End Sub
________________________________________________________________
Private Sub sock_DataArrival(ByVal bytesTotal As Long)
Dim T As String
'전송받은 데이터를 T에 저장시킨후, txtMain에 출력합니다.
sock.GetData T
txtMain = txtMain & T & vbNewLine
End Sub
________________________________________________________________
Private Sub txtInput_KeyPress(KeyAscii As Integer)
'엔터키가 눌러지면, 데이터를 T에 저장한후,전송시킨다음, _
txtMain에 출력합니다.
If KeyAscii = 13 Then
T = txtInput
sock.SendData T
txtMain = txtMain & T & vbNewLine
End If
End Sub
________________________________________________________________
서버프로그램의 코딩이 끝났습니다. 매우 간단하죠? 이제 나머지 클라
이언트 프로그램도 코딩해볼까요?
⑤ 클라이언트 프로그램
________________________________________________________________
Private Form_Click()
'IP주소(Domain Name)입력한후, 서버로 연결합니다. 주의할것
'은포트를 같게 해줘야 합니다. " sock.Connect T, 2000 "로 1
'줄로 코딩하셔도 됩니다. 여러분 편하신대로 하세요.
T = InputBox("IP주소를 입력하세요")
sock.RemoteHost =
sock.RemotePort = 2000
sock.Connect
End Sub
________________________________________________________________
Private Sub sock_Connect()
MsgBox "서버에 접속 완료!",vbInformation,"^^;"
End Sub
________________________________________________________________
Private Sub sock_DataArrival(ByVal bytesTotal As Long)
Dim T As String
'전송받은 데이터를 T에 저장시킨후, txtMain에 출력합니다.
sock.GetData T
txtMain = txtMain & T & vbNewLine
End Sub
________________________________________________________________
Private Sub txtInput_KeyPress(KeyAscii As Integer)
'엔터키가 눌러지면, 데이터를 T에 저장한후,전송시킨다음, _
txtMain에 출력합니다.
If KeyAscii = 13 Then
T = txtInput
sock.SendData T
txtMain = txtMain & T & vbNewLine
End If
End Sub
⑥ 결과확인...
서버/클라이언트 프로그램, 총 2개의 프로그램이 만들어졌습니다.
이제 확인을 해봐야죠..
우선 컴퓨터가 2대가 있어야 겠죠.. 1:1채팅프로그램이므로...
그리고 A,B컴퓨터 모두 인터넷에 연결된 상태입니다.
우선 A(서버)가 프로그램을 실행합니다. Load이벤트로 인해서 자동으로 소켓
을 열어놓고, B(클라이언트)가 접속하기를 기다리고 있죠??
B(클라이언트)가 프로그램을 실행합니다. 그리고 폼을 Click합니다.
그럼 입력상자가 뜰것입니다. 거기서 A의 IP주소 및 Domain Name을 입력합니
다. 그럼 포트설정 및 IP주소를 인터넷상에서 막 찾습니다. 그럼 곧 몇초뒤에
연결이 될것입니다.
아 그런데 컴퓨터 1대밖에 없다구요?? 걱정하실것 없습니다. 다음처럼 하세요
자신의 컴퓨터가 서버, 클라이언트 모두 테스트하실수 있습니다.
우선 서버프로그램을 실행시켜놓습니다. 그리고 창을 적절히 구석에 위치시키
고 클라이언트 프로그램을 실행시킵니다. 그리고 똑같이 폼을 Click한후
IP주소를 입력하는데 "127.0.0.1"로 입력하세요. 그럼 바로 연결이 될것입니
다. "127.0.0.1"은 자신의 컴퓨터 IP주소를 뜻합니다.
⑦ 마치면서...
이전의 "네트워크 프로그래밍 강좌" 보다 말들이 훨씬 많아졌네요.
하지만 그만큼 이해가 가셨으리라 생각됩니다. 저또한 강좌를 다시 쓰면서,
복습도 하고, 괜찮네요! ^^;
하지만 여기서 멈추지 말고, 이제 여러분은 창의력/응용력을 바탕으로 프로그
을 여러분이 다시 재 창조 하십시요! 연결된 시간을 보여준다던가? 등...
참고로 위와 같은 프로그램은 세롬이나 이야기에서도 호환이 됩니다..
그럼 열심히 하시고요.. 좋은 프로그램 만들어서 우리나라 S/W발전하는데 도
움이 됩시다!
열씸히 펐습니다.
작성자 : 김동민()
======================================================================
목 표 : 네트워크 프로그래밍 -New Version-
강 좌 : 김동민 (2000.01.15)
연락처 : HiTel ID : real21c
E-Mail : real21c@hitel.net
HomePage : http://my.netian.com/~real21c
이 강좌를 다른곳에 올려주실때에는 원본그대로를 올려주세요.
혹시 틀린것이 있거나, 질문이 있으시면 위의 연락처로 맬 보내주세요.
======================================================================
안녕하세요? 김동민입니다. 어떤분의 요청으로 강좌를 다시 쓰게 되는군요!
이번 강좌는 이전의 강좌보다, 더욱더 쉽고 자세하게 쓰였습니다. 그래서 그런지
말도 많아지고, 용량도 커지는 군요.. ^^;
이제는 모든세상이 인터넷으로 다 통합될것이고, 세계도 점점 이제 작아질것입니
다.요즘 두룻넷이나, ADSL 등.. 이런것만 봐도 알수 있겠죠... ^^;
프로그램도 이제는 이런 시대에 맞춰서, 인터넷, 웹, 네트워크 등의 기술을 이용
한프로그램을 만들어야 승산이 있을것입니다..
그래서 이번에는 Visual Basic을 이용해서 네트워크 프로그래밍을 배워보죠!
참고로 이 강좌는 5.0, 6.0 다 됩니다. (4.0은 잘 모르겠군요..)
① 네트워크 프로그래밍?
네트워크 프로그램은 어떤게 있을까요? 이것도 생각하기 나름이겠지만, 기존
에 나와있는것들은 채팅이나, 원격제어 등... 이런것들이 있죠..
그중에서 1:1채팅프로그램을 만들어볼까 합니다.
그런데 1:1채팅프로그램에 필요한것이 있습니다. Microsoft에서 제공해주는
Winsock이라는 컨트롤(OCX)입니다. 우리는 이것을 이용하여 만들수 있습니다.
이 컨트롤은 소켓의 연결, 데이터 송수신 등.. 의 역활을 해줍니다.
채팅이라는 프로그램은 어렵지않습니다. 이제 여러분은 따라하시기만 하면 됩
니다!
② 하기 전에...
하늘사랑(SKYLOVE)라고 아시겠죠?? 이거 모르시면 갑첩?
만약 아신다면 한번이상은 접속해보셨을것입니다.. 즉, 제가말하고자 하는것
은 서버, 클라이언트입니다..
서 버 - 하늘사랑(하이텔, 천리안, 나우누리 등...)
클라이언트 - 여러분! (서버에 접속하는 사용자들...)
이번에 만들고자 하는 1:1채팅프로그램도 서버와, 클라이언트가 있어야 겠죠.
즉 프로그램이 두개 있어야 한다는것입니다. 서버프로그램과, 클라이언트 프
로그램, 전 프로그램을 따로따로 만들어서 여러분에게 자세히 가르쳐 드리겠
습니다! 하지만, 여러분의 실력을 전 믿습니다.. 이 강좌에서 끝나시지 마시
고, 여러분들 께서 직접 서버, 클라이언트 프로그램을 합치시기 바랍니다. 하
나의 프로그램에서 서버와, 클라이언트가 가능한 프로그램.. ^^;
③ Winsock Control?
먼저 코딩전에 알아둘것이 있습니다. Winsock의 컨트롤의 이벤트와 속성들...
a,b,c를 먼저배우고 단어를 배우듯이 우선 이벤트와 속성을 먼저 알아보도
록 합시다!
[참고]
Winsock 컨트롤은 TCP/IP프로토콜과, UDP프로토콜을 지원합니다.
TCP/IP는 큰 데이터를 보낼수 있고, 안정적이지만 UDP는 그렇지 못합니다.
그리고 TCP/IP는 인터넷 표준 프로토콜이신거 아시죠??
즉 전 세계 어디든지, 인터넷이 가능한곳이라면 바로 연결가능합니다.
이번에 만들 1:1채팅프로그램 역시 TCP/IP프로토콜을 이용하여 만들것입니
다. 그래서 이벤트와 속성도 TCP/IP만을 설명하겠습니다.
[이벤트]
Close
이것은 소켓이 닫힐때 생성됩니다. 즉 연결이 끊어질때일어나는 일
어나는 이벤트죠.
Connect
이것은 서버에 연결될때 일어납니다. 즉 연결을 하는 클라이언트에
만 일어나는 이벤트입니다.
ConnectionRequest
이것은 클라이언트가 접속될때 일어납니다. 이것은 Client와 반대로
서버에만 일어나는 이벤트입니다.
DataArrival
이것은 서버/클라이언트 모두 일어나는 이벤트입니다. 이것은 서로
데이터를 주고받을때 일어납니다. 즉 A가 B에게 "사랑해~~"라는 메
세지를 전송했다고 합시다! 그럼 B에서는 DataArrival이벤트가 일어
납니다.
Error
단어 그대로, 에러가 날때 일어납니다. 연결이 안된다거나 등....
SendComplete
단어 그대로, 보내기가 완료될때.. 아까처럼 A가 B에게 "사랑해~~"
라는 메세지가 전송이 끝났을때 일어납니다.
SendProgress
단어 그대로, 보내기 과정이 일어날때 이벤트가 일어납니다. A가 B
에게 "사랑해~~"라는 메세지를 전송되는 과정에서 일어납니다. 큰
파일을 전송할때 매우 유용하겠죠.. 전송상황을 알아볼때..
[속성]
.Accept
이것은 서버에게만 필요한 속성입니다. 여러분이 통신망에 접속했다
고 합시다! 우선 아이디/비번을 입력하면 접속이 되죠??
이 때 서버에서는 아이디/비번이 맞는지 확인하고, 여러분의 접속을
허용합니다. 즉 여러분에게 하나의 소켓이 만들어진다고 해야 하나?
이 때, 이 허용할때 필요한 속성이 Accept입니다. B가 A로 접속할때
A가 B를 Accept해야, B가 접속을 할수 있다는 얘기입니다! ^^;
.Close
접속을 끊을때 필요한 속성입니다. 즉 통신에서 X명령으로 접속을 끊죠
.Connect
연결을 할때 필요한 속성입니다. 세롬이나, 이야기에서 ATDT로 전화를
걸때 생각하시면 됩니다.
.GetData
DataArrival 이벤트에서 주로 쓰이는 속성입니다. 즉 데이터를 받을때
필요하죠.. 이것을 DataArrival 이벤트안에다가 " sock.GetData T "
이렇게 하시면 데이터를 받을때 T라는 변수에다가 저장한다는 뜻입니다
.Listen
이것은 서버에게만 필요한 속성입니다. 서버에서 사용가능한 소켓을 대
기시킨다는 뜻인데.. 서버에서 이 소켓을 열어놔야, 클라이언트가 열린
소켓으로 접속이 가능합니다.
.LocalPort
이것은 서버에게만 필요한 속성입니다. 즉 서버의 포트를 정해야 하는
데 여러분은 1000번 이상의 포트를 이용하세요. 1000번 아래는 예약된
포트들이 많기 때문입니다. 자세하게 설명한다면 여러분이 통신망을 텔
넷으로들 어갔다고 합시다. 여러분은 그럼 23번의 포트를 사용하는것이
죠.. 여러분이 텔넷프로그램을 만든다고 하면 포트를 23으로 하시면 되
겠죠.. 이것은 여러분 임의대로 정하세요. 단 Long 범위안으로 1000이
상을 정하시면 되겠네요!
.RemotePort
이것은 클라이언트에게만 필요한 속성입니다. 이 포트는 서버에서 지정
한 포트와 똑같아야 한다는것을 명심하시길 바랍니다. 서버가 2000포트
를 사용한다면, 클라이언트 역시 2000포트를 사용하셔야 합니다!
.RemoteHost
이것도 클라이언트에게만 필요한 속성입니다. 연결하려는 서버의 IP주
소 또는 Domain Name이 들어갑니다. 연결할때 필수입니다.
.SendData
이것은 데이터를 보낼때 사용하는 속성입니다. " sock.SendData T "
하시면 T에 저장된 내용을 보낸다는 뜻입니다.
.State
이것은 현재 소켓의 상태를 점검해줄수 있습니다. 연결상태 등을 숫자
로 표시해줍니다.
④ 서버 프로그램
이제 서버를 만들어야 겠죠.. 1:1채팅프로그램의 서버역활은 무엇일까요?
방을 만드는 사람이라고 생각하시면 됩니다. 즉 방장이죠...
하지만 위의 ③을 반드시(반드시) 조금이라도 이해하셔야 합니다!
1. 우선 위에서 설명한 Winsock이라는 컨트롤을 설치해야 합니다.
설치방법은 Ctrl + T키를 누르세요! 그럼 여러가지 구성요소(OCX)들의
목록이 나옵니다. 그중 [ Microsoft Winsock Control 5.0(6.0) ]을 체
크한후 확인 버튼 누르세요. 그럼 도구모음 왼쪽의 도구상자에 보시면
컴퓨터 2대가 연결된 모양의 아이콘의 컨트롤이 추가되어있습니다.
이게 바로 Winsock(윈속) 컨트롤입니다.
2. 컨트롤만 추가하면 안돼요! 폼에다가 디자인하셔야죠... 이것은 Timer
컨트롤처럼 실행했을때, 보이지 않습니다. 그럼 폼에다가 추가하세요..
TextBox컨트롤도 2개 추가합니다.. 하나는 채팅시 화면을 보여주는 출
력 창의 역활을 할것이고, 또 하나는 채팅시 입력창의 역활을 할것입니
다. 그리고 Name속성을 다음과 같이 바꾸어 주세요.
[Name]
Winsock1 : sock
Text1 : txtMain
Text2 : txtInput
그리고 세롬이나, 기타 채팅프로그램처럼 디자인을 멋지게 꾸미세요.
이것은 여러분들의 몫입니다. 근데 몫이 맞나요?(국어를 못해요)
3. 이제 코딩만이 여러분을 기다리고 있습니다. 절대 어렵게 생각하지 마
시고, 자신감을 가지시길...
________________________________________________________________
Private Form_Load()
sock.LocalPort = 2000 '사용자 임의 포트를 정합니다.
sock.Listen '그리고 클라이언트가 접속할수 있도
'록 소켓을 열어놓습니다.
End Sub
________________________________________________________________
Private Sub sock_ConnectionRequest(Index As Integer, _
ByVal requestID As Long)
'만약 소켓이 닫혀있지 않다면, 접속을 허용합니다.
If sock.State <> sckClosed Then sock.Close
sock.Accept requestID
MsgBox "클라이언트 입장 완료!",vbInformation,"^^;"
End Sub
________________________________________________________________
Private Sub sock_DataArrival(ByVal bytesTotal As Long)
Dim T As String
'전송받은 데이터를 T에 저장시킨후, txtMain에 출력합니다.
sock.GetData T
txtMain = txtMain & T & vbNewLine
End Sub
________________________________________________________________
Private Sub txtInput_KeyPress(KeyAscii As Integer)
'엔터키가 눌러지면, 데이터를 T에 저장한후,전송시킨다음, _
txtMain에 출력합니다.
If KeyAscii = 13 Then
T = txtInput
sock.SendData T
txtMain = txtMain & T & vbNewLine
End If
End Sub
________________________________________________________________
서버프로그램의 코딩이 끝났습니다. 매우 간단하죠? 이제 나머지 클라
이언트 프로그램도 코딩해볼까요?
⑤ 클라이언트 프로그램
________________________________________________________________
Private Form_Click()
'IP주소(Domain Name)입력한후, 서버로 연결합니다. 주의할것
'은포트를 같게 해줘야 합니다. " sock.Connect T, 2000 "로 1
'줄로 코딩하셔도 됩니다. 여러분 편하신대로 하세요.
T = InputBox("IP주소를 입력하세요")
sock.RemoteHost =
sock.RemotePort = 2000
sock.Connect
End Sub
________________________________________________________________
Private Sub sock_Connect()
MsgBox "서버에 접속 완료!",vbInformation,"^^;"
End Sub
________________________________________________________________
Private Sub sock_DataArrival(ByVal bytesTotal As Long)
Dim T As String
'전송받은 데이터를 T에 저장시킨후, txtMain에 출력합니다.
sock.GetData T
txtMain = txtMain & T & vbNewLine
End Sub
________________________________________________________________
Private Sub txtInput_KeyPress(KeyAscii As Integer)
'엔터키가 눌러지면, 데이터를 T에 저장한후,전송시킨다음, _
txtMain에 출력합니다.
If KeyAscii = 13 Then
T = txtInput
sock.SendData T
txtMain = txtMain & T & vbNewLine
End If
End Sub
⑥ 결과확인...
서버/클라이언트 프로그램, 총 2개의 프로그램이 만들어졌습니다.
이제 확인을 해봐야죠..
우선 컴퓨터가 2대가 있어야 겠죠.. 1:1채팅프로그램이므로...
그리고 A,B컴퓨터 모두 인터넷에 연결된 상태입니다.
우선 A(서버)가 프로그램을 실행합니다. Load이벤트로 인해서 자동으로 소켓
을 열어놓고, B(클라이언트)가 접속하기를 기다리고 있죠??
B(클라이언트)가 프로그램을 실행합니다. 그리고 폼을 Click합니다.
그럼 입력상자가 뜰것입니다. 거기서 A의 IP주소 및 Domain Name을 입력합니
다. 그럼 포트설정 및 IP주소를 인터넷상에서 막 찾습니다. 그럼 곧 몇초뒤에
연결이 될것입니다.
아 그런데 컴퓨터 1대밖에 없다구요?? 걱정하실것 없습니다. 다음처럼 하세요
자신의 컴퓨터가 서버, 클라이언트 모두 테스트하실수 있습니다.
우선 서버프로그램을 실행시켜놓습니다. 그리고 창을 적절히 구석에 위치시키
고 클라이언트 프로그램을 실행시킵니다. 그리고 똑같이 폼을 Click한후
IP주소를 입력하는데 "127.0.0.1"로 입력하세요. 그럼 바로 연결이 될것입니
다. "127.0.0.1"은 자신의 컴퓨터 IP주소를 뜻합니다.
⑦ 마치면서...
이전의 "네트워크 프로그래밍 강좌" 보다 말들이 훨씬 많아졌네요.
하지만 그만큼 이해가 가셨으리라 생각됩니다. 저또한 강좌를 다시 쓰면서,
복습도 하고, 괜찮네요! ^^;
하지만 여기서 멈추지 말고, 이제 여러분은 창의력/응용력을 바탕으로 프로그
을 여러분이 다시 재 창조 하십시요! 연결된 시간을 보여준다던가? 등...
참고로 위와 같은 프로그램은 세롬이나 이야기에서도 호환이 됩니다..
그럼 열심히 하시고요.. 좋은 프로그램 만들어서 우리나라 S/W발전하는데 도
움이 됩시다!
열씸히 펐습니다.
# by | 2007/05/08 13:14 | 천공の성 콤퓨타. | 트랙백 | 덧글(4)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
드뎌 시작하는거군화
예전에 만들었었는데... 지금은 기억도 잘 안나네요.
잘 안되는거 있으시면 제가 기억 나는데 까진 알려드릴꼐요.