메뉴 건너뛰기

프로그래밍


아래 소스는, SMS 서비스를 제공해주는 사이트에 HTTP로 SMS전송 요청을 하는 방법입니다. 약간 응용하여 로그인 단계를 하나 추가한 후 보낼 수도 있을 것입니다.(물론, 이를 위해서는 약간의 코딩이 더 필요합니다. 이는, 여타의 무료 문자 메시지 제공 사이트와 연동하는 방법이 되겠지요.^^)

isGET == true 이면 GET 형태로 그렇지 않으면 POST 방식으로 CGI 쿼리를 날리는 간단한 방법입니다.


// sms.h 
class CSms : public CAsyncSocket { 
// Attributes : : 
}; 
: 
: 
//sms.cpp // 

BOOL CSms::SendSMSNow(BOOL isGET) { 
char sendBuffer[4096]; 
char recvBuffer[4096]; 
int ret; 

//자신의 소켓을 Create 한다 
if(Create() == FALSE) return FALSE; 

//서비스 제공사이트의 IP 주소를 80(보통HTTP)포트로 접속한다. Connect(m_ServerIP, 80); 
//	

if(isGET == TRUE) {	
//해당사이트에서 요구하는 CGI 쿼리 포멧으로 자신의 보내는 내용/번호, 받는 번호를 설정하고 해당사이트에서 전송시 요구하는 아이디와 패스워드를 담는다. 
//즉, 이와 같이 한번의 쿼리에 아이디와 패스워드가 맞고 쿼리가 바를 경우 SMS를 날릴 수 있도록 서비스를 제공해주는 사이트에 미리 가입이 되어 있어야 한다. 
//아래는 nicesms.co.kr 이라는 사이트의 서비스를 예로 들었다. sprintf(sendBuffer,"GET %s?%s=%s&%s=%s&%s=%s&%s=%s&%s=%s&%s HTTP/1.0\r\n\r\n", m_CGIAddr, m_Param_ID, m_ID, m_Param_PW, m_PW, m_Param_MSG, m_strMessage, m_Param_RecvNum, m_strRecvNum, m_Param_SendNum, m_strSendNum, m_Param_etc); 
} else { 
CString strPacket, strContentLength; CString strParam; strParam.Format("%s=%s&%s=%s&%s=%s&%s=%s&%s=%s&%s", m_Param_ID, m_ID, m_Param_PW, m_PW, m_Param_MSG, m_strMessage, m_Param_RecvNum, m_strRecvNum, m_Param_SendNum, m_strSendNum, m_Param_etc); strContentLength.Format("%d",strParam.GetLength()); 
strPacket = "POST "; 
strPacket += m_CGIAddr; 
strPacket += " HTTP/1.1\r\n"; 
strPacket += "Accept: */*\r\n"; //
strPacket += "Referer: http://" + m_ServerIP + m_CGIAddr + "\r\n"; strPacket += "Accept-Language: ko\r\n"; 
strPacket += "Content-type: application/x-www-form-urlencoded\r\n"; strPacket += "Accept-Encoding: gzip, deflate\r\n"; 
strPacket += "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"; 
strPacket = strPacket + "Host: " + m_ServerIP + "\r\n";
strPacket = strPacket + "Content-Length: " + strContentLength + "\r\n"; 
strPacket += "Cache-Control: no-cache\r\n"; 
strPacket += "Connection: Keep-Alive\r\n"; 
strPacket += "\n"; 
strPacket += strParam; 
strPacket += "\r\n\r\n"; 
sprintf(sendBuffer, strPacket); //AfxMessageBox(sendBuffer); 
} //AfxMessageBox(sendBuffer); 
Sleep(1500); 

//쿼리를 날린다. 
if(Send(sendBuffer,strlen(sendBuffer),0) <= 0) return FALSE; 

//잠시 대기후... 
Sleep(1000); 
memset(recvBuffer,0,sizeof(recvBuffer)); 

// 응답 데이터를 수신한다. 
do{ ret = Receive(recvBuffer,4096,0); }while(ret > 0); 

// 수신된 데이터를 파싱하여 송신의 성공 유무를 확인하는 코드를 작성할 수 있을 것이다. 
//recvBuffer[ret] = NULL; 
//AfxMessageBox(recvBuffer); 

// 소켓을 닫는다. 
Close(); 
return TRUE; }






번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [48] 파이팅건맨 2016.02.20 108617
공지 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 15769
공지 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 14700
125 [TIP] 자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 파이팅건맨 2013.05.04 649
124 위치추적 [1] 우람사랑 2013.04.06 1966
123 [TIP] MySQL - NaviCat 사용시 에러 확인방법 파이팅건맨 2010.02.23 1175
122 [TIP] 설치된 코덱 리스트 얻어오기 파이팅건맨 2010.02.18 921
121 [TIP] VFW 에서 영상 압축을 위한 코덱을 코드상에서 선택하여 실시간 저장하는 방법입니다. 파이팅건맨 2010.02.04 1099
120 [TIP] Visual Studio App Wizard 만들기 관련 파이팅건맨 2009.12.17 993
119 [TIP] C# 에서 Win32 DLL 을 사용하기 위한 방법 파이팅건맨 2009.07.16 1149
118 [TIP] WMI 이용, 사용가능한 모뎀 포트 알아내기 파이팅건맨 2009.07.05 911
117 [TIP] Excel Ole 를 사용시 Hidden 열 혹은 행인지 알아내는 방법 파이팅건맨 2009.05.17 705
116 [TIP] Win32 API를 사용하여 응용 프로그램 열거하기 파이팅건맨 2009.01.15 705
115 [TIP] 홈페이지 자동 클릭하기 소스 파이팅건맨 2009.10.25 1853
114 [TIP] (MSDN) VS2005 에서 BHO 만드는 방법 링크 파이팅건맨 2009.01.06 614
113 [TIP] Windows 에서 COM10 이상을 여는 방법 [2] 파이팅건맨 2008.05.26 977
» [TIP] 인터넷으로 문자메시지 (SMS) 보내기 파이팅건맨 2008.03.23 3042
111 [TIP] 동적 DLL이 가진 Dialog를 Child Window로 띄우기 파이팅건맨 2008.03.16 1011
110 [TIP] 치명적 오류 발생시 오류창 안뜨게 하기? 파이팅건맨 2008.02.25 776
109 [TIP] USB 장치를 열거하는 코드 파이팅건맨 2008.02.03 651
108 [TIP] Windows 에서 장치 연결/제거 관리 코드 파이팅건맨 2007.12.21 712
107 [TIP] Source Insight 용 ARM Assembler 파서 파이팅건맨 2007.12.18 794
106 [펌] precompiled header 설정 관련 파이팅건맨 2007.08.07 650
위로