ip1000 드라이버

2010. 3. 28. 10:16
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.


1. 클래스 라이브러리

2. 프레임워크

3. 컴포넌트
Posted by 창신다이
- 협의 : 어플리케이션의 기본적인 부분을 소스코드로 제공하는 틀
- 광의 : 시스템 개발 전체에 대한 진행 방법으로 제공하는 틀
Posted by 창신다이
Posted by 창신다이
<a herf="javascript:void(0)" onClick="jsTest();return false;">[TEST]</a>
Posted by 창신다이
Posted by 창신다이

SKT
데이터 세이프정액제(2G, 3G 모두 가입가능)
26000원
NATE/June 통화료 무제한 무료(인터넷직접접속 통화료 제외)

네이트 프리정액제(2G, 3G 모두 가입가능)
14000원
패킷데이터 통화 중 텍스트, 소용량멀티미디어 통화료 무제한 무료
(단, VOD/MOD 및 인터넷직접접속은 별도과금)
서킷데이터 통화 무제한 무료
(단, 무료통화는 국내 사용분에 한하며, 정보이용료, 영상통화서비스, 컬러메일(MMS) 건당요금은 별도)


KTF

SHOW범국민데이터 요금(3G만 가입가능)
기본료  5000원(제공금액 20000원 상당)
무료제공금액 초과시 75%할인율 적용
월정금액(28000원) 이후에는 무제한 사용

범국민데이터요금(2G만 가입가능)
기본료 5000원(제공금액 20000원 상당)
월정금액(26000원) 이후에는 무제한 사용

매직엔 Free(2G만 가입가능)
14,000원
매직엔과 멀티팩, GPANG 이용시 부과되는 모든 데이터통화료 무제한 무료

DATA Free(2G만 가입가능)
24,000원
매직엔, 멀티팩, 핌 이용시 월정액으로 데이터통화료 무제한 무료
인터넷 직접 접속료 60% 할인(PC로 연결하여 인터넷 사용하는 경우)

LGT
OZ 무한자유
기본료 월 6000원
가입후 6개월간(가입월 포함) 무제한 이용 가능, 이후 월 1GB무료통화 제공(초과시 과금)
웹서핑 및 ez-i통화료 모두 포함

안심정액 데이터
기본료 3000원(제공금액 10000원 상당)
월정금액(29500원) 이후에는 무제한 사용

Posted by 창신다이

1. 탐색기에서 도구-폴더옵션-파일형식 선택 후 dsw 선택

2. 고급 - 편집

3. DDE 사용 체크 해제

4. 명령을 실행할 응용 프로그램에 다음 입력
"%VS6_HOME%\Common\MSDev98\Bin\MSDEV.EXE" "%1"

여기서 %VS6_HOME%의 경우 설치 경로에 따라 맞게 수정할 것.
따옴표로 묶는 것은 스페이스 인식을 제대로 시키기 위함.
%1은 실행 인자로서, 실행할 ***.dsw가 들어 올 것임.

Posted by 창신다이

mysql 덤프

2007. 6. 7. 20:58

* SQL level backup of a table
SELECT ... INTO OUTFILE 또는 BACKUP TABLE

* SQL level load of a table
LOAD DATA INFILE 또는 RESTORE TABLE

다음은 사용 예입니다.
mysql> USE db1;
mysql> SELECT * INTO OUTFILE "data.txt" FROM test_table;

mysql> USE db1;
mysql> LOAD DATA INFILE "data.txt" INTO TABLE test_table;

mysql> BACKUP TABLE tbl_name[,tbl_name...] TO '/path/to/backup/directory'
mysql> RESTORE TABLE tbl_name[,tbl_name...] FROM '/path/to/backup/directory'

1. select 결과 -> text 출력
sql> SELECT * INTO OUTFILE '출력파일.txt'  fields terminated by '|' lines terminated by '|\r\n'  FROM 테이블;

2. text ==> db
sql> load data infile '출력파일.txt' into table 테이블 fields terminated by '|' lines terminated by '\n';

mysqldump -u root -p ljk_test --no-data > testtest.sql

Posted by 창신다이

@echo off
for /f "tokens=*" %%i in ('cd') do set DoADP=%%i
for /f "tokens=1 delims=:" %%i in ('cd') do set DoADRIVE=%%i
for /f "tokens=2 delims=:" %%i in ('cd') do set DoAPATH=%%i

@echo on
echo %DoADP%
echo %DoADRIVE%
echo %DoAPATH%

Posted by 창신다이

EHR(병원전자차트)
PACS(의료영상저장전송시스템)

u-병원 ex)휴대폰을 이용한 당뇨 체크 결과 전송

의료정보학(Medical Information)
XML - DB
Hospital1 ─── Hospital2
                 │
           데이터 교환

경북대학교 의료정보교실
polala@chol.com

Posted by 창신다이

oeminfo.ini
oemlogo.bmp
두 개의 파일을 생성 후 "c:\windows\system32" 폴더로 복사

①oeminfo.ini sample
[general]
Manufacturer=NH Information System
Model=Chief
[Support Information] 
Line1=농협정보시스템 개발사업부
Line2=e금융 모바일 뱅킹

※Support Information 은 지원 정보 버튼 누르면 나오는 정보

②oemlogo.bmp
※최대사이즈 200 x 120

참고URL:
http://www.dcinside.com/webdc/lecture/study_list.php?code1=20&code2=30&id=3833&s_mode=&s_que=

Posted by 창신다이

[HKEY_LOCAL_MACHINE - SOFTWARE - Microsoft - Windows NT -  CurrentVersion]

RegisteredOrganization -> 회사 이름
RegisteredOwner -> 사용자 이름

Posted by 창신다이

프로그램 추가/제거'에서 'Windows 구성 요소 추가/제거' 탭
'MSN 메신저' 체크표시를 없애면 시작 메뉴의 프로그램 메뉴에서만 사라지고, 완벽하게 삭제X

완벽하게 삭제하려면, 내 컴퓨터에서 '폴더 옵션'에서 '숨김 파일 및 폴더 표시'를 활성화하고, C:\windows/inf/sysoc.inf 파일 오픈

"msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,hide,7" 에서 "hide" 제거 'msmsgs=msgrocm.dll,OcEntry,msmsgs.inf,7'

이후 'Windows 구성 요소 추가/제거'에 메신저와 관계된 항목이 두 개 나타남.

이 두 가지를 함께 제거하면 시스템에서 MSN 메신저를 깨끗하게 삭제할 수 있음.

Posted by 창신다이

XP에서 바탕화면에 대고 마우스 오른쪽 버튼을 눌러 나오는 팝업창에 "이콘 정렬 순서" 세부 메뉴를 보면 "바탕 화면 아이콘 표시" 가 있다. 이 부분의 체크를 풀면 바탕화면에서 아이콘들이 사라진다.
실제로 없어지는 것이 아니고, 바탕화면 폴더에 들어가서 보면 아이콘들이 다 있는데, 바탕화면에서 시각적으로만 사라지는 것이다.

지난 번에 바탕화면 아이콘을 숨겼다가, 다시 표시 할려는데 어떻게 했는지 기억이안나 엄청 삽질을 하다가 네이버 검색으로 찾았다.

정말 내 머리가 영속적인 저장 장치가 아님을 깨닫고, 열심히 메모하는 습관을 길러야겠다.
이 블로그도 그래서 만들었는데 말야, 제대로 활용하지도 못하고...-_-;;

Posted by 창신다이
Posted by 창신다이
구글해킹이란 책을 사 놓고 1년 가까이 안 보고 있구나.
예전에 읽으면서 메모해 둔것이 있어, 포스팅 해둔다.
계속 업데이트 예정...^^

(+)는 다음에 오는 단어를 반드시 포함
* 이때 (+)와 단어 사이에는 공백 없음

(NOT) or (-) 특정 단어를 검색에서 제외

intext:(password | passcode)
intext:(username | userid | user)
filetype:csv

[연산자:검색어]
Posted by 창신다이

UML 사이트

2006. 11. 16. 14:00
Posted by 창신다이
Posted by 창신다이

도스시절 한글라이브러리인 한라 프로를 만드신 임인건님께서 쓰신 글입니다.
프로그래밍을 공부하시는 분들께 큰 도움이 되리라 생각합니다.

시작부터 경지에 이르기까지…

1. 정보를 모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어다. 오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴한 지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지 때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를 안 보는 데서 생기니라. 그렇더라도 모두 다 읽을 필요는 없느니라.

2. 너의 PC가 안전하다고 믿지 말지어다. 5분 후에 정전이 되고 내일 너의 하드가 맛이 가리라. 그러하니 너의 소중한 소스 코드는 정기적으로 여러 군데에 단계별로 백업해 두어라.

3. 변하는 수를 다룰 때에는 늘 조심할지어다. 정수가 절대로 그 한계를 넘지 않으리라 가정하는 것은 어리석음이라. 127, -128, 255, 32767, -32768, 65535, 이 숫자들을 너의 골수에 새기어라. 0.0은 0이 아니니 실수는 원래부터 결코 정밀하지 않느니라. 부호 없는 것과 있는 것을 어울리거나 정수끼리 나눌 때에는 늘 조심하여라.

4. 무슨 일을 반복시킬 때에는 처음과 끝에 유의할지어다. 너의 컴퓨터는 1보다는 0을 좋아 하니라. 배열의 첨자가 그 범위를 넘지 않을지 손 댈 때마다 따져 보아라. 수식에 1을 더하거나 뺄 때에는 늘 긴장하라. 너의 프로그램은 단지 한 번 덜해서 틀리고 한 번 더해서 다운되느니라.

5. 항상 모든 경우의 수를 고려하고 섣불리 생략하지 말지어다. 절대로 일어나지 않을 일은 반드시 일어나고, 가장 드물게 일어날 일이 가장 너를괴롭히리라. 그러하니 언제나 논리에 구멍이 없는지 꼼꼼히 따져 보고, if를 쓸 때에는 else부터 생각하라.

6. 함수 안에서 매개 변수값은 결코 믿지 말지어다. 지금 그 매개 변수가 결코 가질 수 없다는 값을 내일부터는 가지리라. 그러하니 매개 변수값이 올바름을 항상 검사할지어다. 그렇더라도 처리 속도가 문제가 되는 경우는 예외이니라.

7. 오류를 알려 주는 기능은 있는 대로 모두 활용할지어다. 컴파일러의 경고는 모두 켜 두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라.

8. 한 번의 수정과 재컴파일만으로 연관된 모든 것이 저절로, 강제로 바뀌도록 할지어다. 어떠한 것을 수정했을 때에 연관된 것이 따라서 변하지 않는다면 그것이 곧 벌레이니라. 컴파일러로 하여금 매개 변수 리스트를 완전하게 검사하도록 하고, 언젠가 손대야 하거나 따라서 변해야 하는 수치는 전부 매크로로 치환하며, 형 정의를 적극 활용하여라.

9. 사용자가 알아서 잘 써 주리라고 희망하지 말지어다. 너의 프로그램은 항상 바보와 미친놈만이 쓰느니라. 사용 설명서를 쓸 때에는 결코 빠뜨리지 말아라. 빠뜨린 만큼 사용자는 너를 괴롭힐 것이니라.

10.매사에 겸손하고 항상 남을 생각할지어다. 가장 완벽한 프로그램일수록 가장 완벽하게 숨은 벌레가 있느니라. 네가 이 세상 최고의 프로그래머라고 떠들며 자만할 때, 옆집 곳간에서는 훨씬 더 뛰어난 것을 묵묵히 만들고 있느니라. 아무렴 프로그래밍은 혼자 잘나서 할 게 아니니, 너로 인해 다른 사람들도 더불어 잘 되면 그얼마나 좋은 것이냐.

이 모든 것을 깨닫고 지키려 애쓰는 자는, 있어도 없어도 되어도 아니되어도 늘 평온하리라.있나니 너희는 모든 프로그램에 대해서 위의 프로시줘를 따를 지니라.

Posted by 창신다이

컴서적 명예에 전당에 들어갈 책은 과연?
http://kldp.org/node/33777

Posted by 창신다이

컴파일러

2006. 10. 18. 20:52

GCC for windows
http://www.cygwin.com/

Visual C++ 2005 Express Beta
http://lab.msdn.microsoft.com/express/visualc/default.aspx
IDE까지 포함, 날짜 제한

Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
통합개발환경이 없음. VC++.NET 2003 컴파일러를 명령창에서 쓸수 있음.

Posted by 창신다이

#include <stdio.h>
#include <locale.h>

void main()
{
wchar_t a = L'한';
setlocale(LC_ALL, "Korean");
wprintf(L"%c");
}

//////////////////////////////////

#include <stdio.h>
#include <locale.h>

void main()
{
wchar_t *a = L"한글처리";
setlocale(LC_ALL, "Korean");   //한글로 인코딩
wscanf(L"%s", a);
wprintf(L"%s", a);
}

Posted by 창신다이

데이타를 대표하는 클래스 하나,
각각의 뷰어의 기능을 가지는 각각의 뷰어 클래스.
단, 데이타 클래스는 내부 데이타 수정의 모든 기능을 가지면서 외부에서 직접 변수를 수정 못하게 해야함.

Posted by 창신다이

1. 연결상태를 어떻게 체크하는가?
- 일단, 소켓통신에는 크게 TCP 방식과 UDP 방식이 있습니다. TCP 방식과 UDP 방식의 가장 큰
차이점은 TCP는 \'연결\'을 한다는 것이고, UDP는 \'연결\'을 하지 않는다는 것입니다.
따라서, 연결상태를 체크한다는 것은 당연히 TCP 방식을 사용할 경우의 이야기이겠지요.
그렇다면, TCP 방식으로 소켓통신을 할 때 \'연결상태\'를 어떻게 체크할까요?
바로 \'3-Way Handshaking\' 기법을 사용합니다. 3-Way Handshaking이 무엇이냐면,
두 PC는 통신을 하기 전에 서로 \'통신 시작한다\'라는 신호를 주고 받는데, 이것이 3단계로
이루어집니다.

1단계: A PC에서 B PC로 SYN 패킷을 보낸다.(나 너랑 통신할래~)
2단계: B PC가 이 SYN 패킷을 받아서 A PC에게 ACK 패킷을 보낸다.(알았어 통신하자~)
3단계: A PC가 이 ACK 패킷을 받아서 다시 B PC에게 ACK 패킷을 보낸다.(그래 이제 간다~)

이 3단계가 완료되면 \'연결상태\'가 되며, 연결이 끊어지기 전까지는 쭈욱 연결상태가 유지됩니다.
연결이 끊어지는 경우는 2가지가 있는데, 하나는 통신을 완료한 후 연결을 종료하는 것이고,
다른 하나는 임의의 장애(?)가 발생하여 강제로 종료되는 것입니다.
통신 완료 후 연결 종료는 연결을 종료하려는 PC가 상대 PC에게 FIN 패킷을 보냄으로써 이루어집니다.
그러나, 장애로 인하여 연결이 종료되는 경우도 있는데, 이 경우 한 PC가 일정 시간 이상 다른 PC의
신호에 응답하지 않으면 연결이 강제로 종료됩니다. 그리고 이때 사용되는 신호란 특별한 것이 아니라,
서로 데이터를 주고 받다가 일정 시간 이상 데이터가 안오면 데이터를 못받은 PC가 \

Posted by 창신다이

Here is an extended example of the console mode OLEDB program that has Insert/Update/Delete functions:

//file: olsamp.cpp
//auth: dick warg
//date: 3/30/2000
//func: minimal oledb program

#include <atldbcli.h>
#include <iostream>

using namespace std;

// define a class for the ACCESSOR to hold the data from the table
class myNwCust
{
public:
   // data elements
   char m_CustomerID[6];
   char m_CompanyName[41];
   char m_ContactName[31];
   char m_Phone[25];


   // column binding  -- I only want these 4 fields (see MS documentation
   // for examples of Multiple Accessor)

   BEGIN_ACCESSOR_MAP(myNwCust,2)
       BEGIN_ACCESSOR(0,true)
           COLUMN_ENTRY_TYPE(1,DBTYPE_STR, m_CustomerID)
           COLUMN_ENTRY_TYPE(2,DBTYPE_STR, m_CompanyName)
           COLUMN_ENTRY_TYPE(3,DBTYPE_STR, m_ContactName)
           COLUMN_ENTRY_TYPE(10,DBTYPE_STR, m_Phone)
       END_ACCESSOR()
       BEGIN_ACCESSOR(1,false)
           COLUMN_ENTRY_TYPE(3,DBTYPE_STR, m_ContactName)
       END_ACCESSOR()
   END_ACCESSOR_MAP()
};


void my_insert(CCommand <CAccessor<myNwCust> >& cust);
void my_update(CCommand <CAccessor<myNwCust> >& cust);
void my_delete(CCommand <CAccessor<myNwCust> >& cust);
bool my_find(CSession& session, CDBPropSet* propset, CCommand <CAccessor<myNwCust> >& cust);


int main()
{

try{
   // fire up COM
   HRESULT hr = CoInitialize(0);
   if(FAILED(hr))
   {
       cout << "Can't start COM!? " << endl;
       return -1;
   }

   // do all the work inside here so the destructors get called before
   // co-uninitialize
   {
           // declare the OLEDB objects INSIDE a block so they will be destroyed before
       // CoUnitialize is called
       CDataSource ds;
       CSession    session;
       CCommand <CAccessor<myNwCust> > cust;
       CDBPropSet propset(DBPROPSET_ROWSET);

   // connect to the database
       hr = ds.Open(_T("MSDASQL"), "OLE_DB_NWind_Jet", "sa", "");
       if(FAILED(hr))
       {
           cout << "Can't open Nwind" << endl;
           return -1;
       }

       /* *************************************************************************
          The CDBPropSet controls the way the database gets opened
       
          The documentation for all these properties can be found if you look in
          the MSDN Help reference:
          \Platform SDK\Database and Messaging Services\Microsoft Data Access SDK\
          OLEDB Programmer's Reference\Part 3 Appendixes\Appendix C\Properties Table

           IF YOU DON'T SET THESE PROPERTIES YOU WON'T BE ABLE TO SCROLL THE TABLE OR MAKE
           CHANGES TO IT!!

           In addition the table MUST have a Primary Key defined.
           No primary key = NO INSERT, NO UPDATE  & NO DELETE

           If you use an automatic integer (identity column) in your table it must not be
           in the Accessor that is used to INSERT to the table. This means that you and I must
           use Multiple Accessors if there is an identity column for the table.
       ******************************************************************************/

       propset.AddProperty(DBPROP_CANFETCHBACKWARDS,   true);
       propset.AddProperty(DBPROP_IRowsetScroll, true);
       propset.AddProperty(DBPROP_IRowsetChange, true);
       propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT |
           DBPROPVAL_UP_DELETE );

       // start the session
       hr = session.Open(ds);
       if(FAILED(hr))
       {
           cout << "Can't open Nwind SESSION" << endl;
           ds.Close();
           return -1;
       }

       // construct the query string
       char mySQL[] = "SELECT * FROM Customers ";


       // open the dataset
       hr = cust.Open(session, mySQL, &propset) ;

   /*  use this form of open without a property set
       if you only need to read the table

       hr = cust.Open(session, mySQL) ; // <---- read only
   */
       if(FAILED(hr))
       {
           cout << "Can't open Nwind TABLE" << endl;
           session.Close();
           ds.Close();
           return -1;
       }

       int line = 0;

       // read all the data
       while(cust.MoveNext() == S_OK)
       {
           char buff[81];
           sprintf(buff,"%d %-5s %-35s %-20s %-15s",++line, cust.m_CustomerID,
                               cust.m_CompanyName,
                               cust.m_ContactName ,
                               cust.m_Phone);
          
           cout << buff << endl;
       }

       // process some user interactions

       char ans[10] ;
       ans[0] = '\0';

       while (ans[0] != 'q')
       {
           cout << "What action? f)ind, i)nsert, d)elete, u)pdate, q)uit ";
           cin.getline(ans, sizeof(ans));
           switch(ans[0])
           {
           case 'i':
               my_insert(cust);
               break;
           case 'd':
               // you need to find a record before you can delete it
               if(my_find(session, &propset, cust))
                   my_delete(cust);
               break;
           case 'u':
               // you need to use find before you update too
               if(my_find(session, &propset, cust))
                   my_update(cust);
               break;
           case 'f':
               my_find(session, &propset, cust);
               break;
           }
       }


       cust.Close();
       session.Close();
       ds.Close();

   }// the destructors get called  before the CoUninitialize
   cout << "That's All Folks" << endl;
   CoUninitialize();

   return 1;
}
catch(...)
{
   cout << "Unknown failure" << endl;
   return -1;
}
}


////////////////////////////// functions //////////////////////////////////////
void my_insert(CCommand <CAccessor<myNwCust> >& cust)
{
   char buff[200];


   cout << "Insert Customer ID  ";
   cin.getline(buff, sizeof(buff));
   strcpy((char*)cust.m_CustomerID, buff);

       cout << "Enter Company Name  ";
   cin.getline(buff, sizeof(buff));
   strcpy((char*)cust.m_CompanyName, buff);

   cout << "Enter Contact Name  ";
   cin.getline(buff, sizeof(buff));
   strcpy((char*)cust.m_ContactName, buff);

   cout << "Enter Phone  ";
   cin.getline(buff, sizeof(buff));
   strcpy((char*)cust.m_Phone, buff);

   HRESULT hr = cust.Insert(0);  // <----- This is where we add the new record
   if(hr == S_OK)
   {
       cout << "INSERT OK \n";
   }
   else
   {
       cout << "INSERT FAILED\n";
   }


}

void my_update( CCommand <CAccessor<myNwCust> >& cust)
{
   /* this is a simple minded update that only changes the contact name
      but you get the idea */

   char buff[100];


   cout << "Update Contact Name\n";
   cin.getline(buff, sizeof(buff));
  
   strcpy((char*)cust.m_ContactName, buff);

   cout << cust.m_CustomerID << endl;
   cout << cust.m_CompanyName << endl;
   cout << cust.m_ContactName << endl;
   cout << cust.m_Phone << endl;

   /* update the record. 
  
     The SetData() method actually does the update. The Update() Method
     kinda flushes the changed data to the database, we don't need that for
     this simple example. 
   */
   HRESULT hr = cust.SetData(1);
   if (FAILED(hr))
   {
       cout << "UPDATE FAILED\n";
   }
   else
   {
       cout << "UPDATE OK\n";
   }
}

void my_delete( CCommand <CAccessor<myNwCust> >& cust)
{
   cout << "Delete ? \n";
   char ans[10];

   cout << cust.m_CustomerID << endl;
   cout << cust.m_CompanyName << endl;
   cout << cust.m_ContactName << endl;
   cout << cust.m_Phone << endl;
  
   HRESULT hr;


   cin.getline(ans,sizeof(ans));
   if (ans[0] == 'y')
       hr = cust.Delete();
   else
       return;


   if (FAILED(hr))
   {
       cout << "DELETE FAILED\n";
   }
   else
   {
       cout << "DELETE OK\n";
   }  

}

bool my_find(CSession& session, CDBPropSet* p_propset, CCommand <CAccessor<myNwCust> >& cust)
{
   char custid[10];
   char SQL[200];

   cout << "Enter customer id ";
   cin.getline(custid, sizeof(custid));

   strupr(custid);  // upper case for compare

  
   sprintf(SQL,"SELECT * FROM Customers WHERE CustomerID = '%s'", custid);

   cust.Close();

   HRESULT hr = cust.Open(session, SQL, p_propset);
   if(FAILED(hr))
   {
       cout << "Can't open find that customer\n";
       cout << SQL << endl;
       return false;
   }

  
   hr = cust.MoveFirst();


   if(FAILED(hr))
   {
       cout << "Can't move to that customer\n";
       return false;
   }


   cout << cust.m_CustomerID << endl;
   cout << cust.m_CompanyName << endl;
   cout << cust.m_ContactName << endl;
   cout << cust.m_Phone << endl;
   return true;
}

Posted by 창신다이

GET / HTTP/1.1
Accept: */*
Accept-Language: ko
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: www.XXXXXX.com
Connection: Keep-Alive
기타해더: 등...
Cookie: 등... \r\n\r\n

이런식으로 만들어서 그냥 소켓으로 보낸다
필요한게 있으면 추가.

www.XXXXXXX.com:80 포트로 접속.

POST 는 \r\n 한번 한 다음에 헤더에서 \r\n 다음에 q=test1&p=test2    \r\n\r\n
이런식으로 규격만 지키면 된다.

CSocket sock;
sock.Create();
sock.connect("서버주소",80);
sock.Send(헤더내용, 헤더길이);
헤더는 문자열 버퍼(char szBuff[])에 저장.

get은 그냥 보내면 되고,
post 는 보통 헤더 한번 Send로 보내고 post 값 한번 더 보내는 2번으로 보낸다.

무조건 http 통신의 끝은 \r\n\r\n 이여야함(엔터두번)

단 HTTP/1.1 규약인 경우만, 즉 get / 는 엔터 한번으로 통신 끝

get / HTTP/1.1 로 시작하면 엔터 두번으로 끝냄

Posted by 창신다이

>jar %1 %2

첫번째 인자 %1
두번째 인자 %2

...

Posted by 창신다이
y = (x + 3) & ~3;
Posted by 창신다이

BLOG main image
오랫동안 꿈을 그리는 사람은 마침내 그 꿈을 닮아 간다. -앙드레 말로- by 창신다이

공지사항

카테고리

분류 전체보기 (248)
공장이야기 (115)
C/C++ 이라도 잘 하자 (23)
엑셀의달인 (8)
윈도우즈프로그래밍 (16)
Unix (3)
DB실전 (4)
MAC OS (3)
모바일 (18)
정보보호 (4)
보안가이드 (0)
WEB (2)
JAVA도 기본은... (2)
기술사 (0)
휴지통 (29)
Education (30)
회사이야기 (19)
일상 (73)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :