일단 인터넷 프로그래밍을 하기전에 winsock.h를 include하시길 바랍니다.
인터넷에서 서로 정보를 공유하는데 서로의 문(門)역할을 하는것으로 Socket이라는 것이 있다.
FTP서버를 접속할때 주소치고 들어갈수 있는것은 그곳의 소켓이 열려있기 때문이다.
설명하기 힘들군... 걍 대충 컴퓨터간의 문 이라고 생각해라. 강좌 첨쓰는거라 설명어케하는지
몰겠다. 그리구 이 모든것에서는 MFC에서만 된다. API가지구 식은땀 흘리지 말라. 그리구
아래꺼 외울라구 하지말구 걍 보며 따라해라. 안외워진다. 그리구 여기에 오타가 있을지도
--; 있으면 망하는데. 어쨋든 있으면 email로... 이거 쓰고싶어서 쓴게 아니라 협박 받아서
쓰는 거니까 넘 많은걸 바라지 마시고 묻지도 마시오~ -.-

일단 소켓을 열어두어야한다. Create()함수를 쓴다

CSocket Socket;
Socket.Create( 포트번호 );

여기서 포트번호에 열고싶은 번호를 쓴다.
예를들어 FTP서버라면 21번을 쓴다. 많은 프로그램에서 포트를 쓰고있기때문에
약간 흔하지 않은 포트번호를 쓰는것도 좋다.
이제는 다른 곳으로 접속을 하기전에 SOCKADDR_IN으로 접속할 곳의 정보를 제공한다.
설명이 엉성하징... 여기서 SOCKADDR_IN은 winsock.h를 include하지 않았다면 에러난다.
이 아래서 Cokenburger는 아무걸로나 대체해도 된다. 헷갈리지 않도록 색깔로 표시를 했음.

SOCKADDR_IN Cokenburger
memset(&Cokenburger, 0, sizeof (SOCKADDR_IN));
Cokenburger.sin_family=AF_INET;
Cokenburger.sin_port=htons(123); // 포트번호
Cokenburger.sin_addr.s_addr=inet_addr("123.123.123.1"); // IP 주소

이젠 Connect()함수를 이용해서 접속만 하면된다.

if(Socket.Connect((SOCKADDR)
&Cokenburger,sizeof(SOCKADDR_IN)) // 만약 접속이 되었으면
AfxMessageBox("접속 성공이당!");
else
AfxMessageBox("접속 실패당-.-");

아참 또한가지 알아두면 좋은게 있다. 도멘네임에서 IP어드레스를 구하는 것이다.
예를들어 ftp.microsoft.com은 207.46.133.140이다 (맞나?)

HOSTENT *Cokenburger_HostName;
Cokenburger_HostName=gethostbyname("telnet.cokenburger.com"); // 여기다가 도멘네임을
char *Cokenburger_IPaddress = (char *)inetntoa(*(LPIN_ADDR)*(Cokenburger_HostName -> h_addr_list));
// Cokenburger_IPaddress에 IP주소가 실림흠......

그러면 남이 여기로 접속을 하려고 하면 어떻게 받을까. Listen()함수를 쓰면 된다.

역시 MFC가 다 해놔서 정말 간단하다.

if(Socket.Listen())
AfxMessageBox(" 어떤넘이 접속했어 ");
else
AfxMessageBox(" 소켓 에러당 ");

이 Listen()함수는 루프를 돌면서 어떤넘이 접속을 하거나 소켓이 빠가질때까지 계속 돌기 때문에
아주 유용하다.

이제 두번째 CSocket 객체를 맹글어야 한다. 아까 맹근 CSocket객체는 Listen()함수로 더 많은 콜을

받을때 쓸 수가 있다. 여기선 만들때 Accept()함수를 쓴다. 접속 허용하는데 쓰는것이다.
두번째 CSocket으로 접속을 허용한다.

CSocket SecondSocket;
if(Socket.Accept(SecondSocket))
AfxMessageBox(" 접속 허용했당.");
else
AfxMessageBox(" 실패당.");

이젠 데이타를 주고받자
이런식으로 하면 된다. 엄청나게 간단하다

(받기)

int nBytesRead; //받은 것의 바이트수
char cbBuffer[2000]; // 2000바이트의 버퍼 준비다.
nBytesRead=SecondSocket.Receive(cbBuffer, sizeof(cbBuffer));
//버퍼에다가 데이타를 받구 nBytesRead에다가 바이트수를

이제 cbBuffer를 보면 받은 데이타가 있을꺼다.

(주기)

int nBytesWritten; // 쓸것의 바이트수
static char szMessage[]="안녕 소켓으로 보내구 있다. 하하!"); //보낼 것
nBytesWritten = SecondSocket.Send ( szMessage, sizeof(szMessage)); // 보내구 nBytes.Written에 바이트수를

+ Recent posts