C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[46756] Re:으음;; 다시 정리해서 재질문 드립니다.
은진 아빠 [squid01] 1246 읽음    2006-10-12 11:47
이렇게 하면 될까 모르겠네요 ^^;;

[ClientIP1]
ip=192.192.192.192

이런식의 저장은 다음의 두함수를 써서 불러오고 쓰고 하는것인거 같습니다.

DWORD GetPrivateProfileString(

    LPCTSTR lpAppName,    // points to section name
    LPCTSTR lpKeyName,    // points to key name
    LPCTSTR lpDefault,    // points to default string
    LPTSTR lpReturnedString,    // points to destination buffer
    DWORD nSize,    // size of destination buffer
    LPCTSTR lpFileName     // points to initialization filename
   );

BOOL WritePrivateProfileString(

    LPCTSTR lpAppName,    // pointer to section name
    LPCTSTR lpKeyName,    // pointer to key name
    LPCTSTR lpString,    // pointer to string to add
    LPCTSTR lpFileName     // pointer to initialization filename
   );

쓰는 방법은....

void __fastcall LoadStr(char *section, char *name, char *fname, char *data) {
    GetPrivateProfileString   (section, name,"",data,100,fname);
}

void __fastcall SaveStr(char *section, char *name, char *fname, char *data) {
    if(strcmp("",data) == 0) return;
    WritePrivateProfileString (section, name, data, fname);
}

LoadStr ("ClientIP1", "ip", "c:\\data\\data.ini", &data);

이렇게 쓰면 텍스트 파일에 있는 ip를 받아 올수 있을거 같구요.

이렇게 ip만 선택된다면... 나머지는 임프님의 방법을 따라 하시면 되지 않을까요??


승현 님이 쓰신 글 :
: 쓰고나니 제가 봐도 조금 혼란스러운 경향이 있네요; 다시 질문드리겠습니다.
: 제가 리스트박스를 사용한 이유는, 텍스트나 기타 파일의 몇 번째 줄의 내용을 집어내는법을 몰라서 그렇습니다.
: 리스트박스는 임시개시공간이고, AnsiString 값에 지정해주기 위한 하나의 도구로만 사용하고 있죠.
:
: 즉, 다른 프로그램의 셋업파일을 보면
:
:  [ClientIP1]
:  ip=192.192.192.192

:  [ClientIP2]
:  ip=123.123.123.123

:  [ClientIP3]
:  ip=000.000.000.000
:
: 이런식으로 작성되어있고, 프로그래밍 할때 '첫번째 클라이언트의 아이피는 ClientIP1에 ip에 있는 값이다'
: 라는 형식으로 프로그래밍이 되어있는데, 저는 그렇게 집어내는방법을 잘 모르기에 텍스트 파일 하나에
:
: 192.192.192.192
:
: 달랑 저렇게만 되어있고, 리스트박스로 불러들인 후에, 지정하는 방법을 쓴 것입니다.
: 굉장히 무식한 방법이죠. 하지만 이렇게 하면 IP가 하나인 경우에는 볼품은 없어도 되기는 되더군요.
: 클라이언트의 경우 필요한 아이피 값이 서버 아이피만 있으면 되는데, 서버의 경우에는
: 모든 클라이언트의 IP를 받아야 하다 보니까 이런 문제가 생기고 있습니다.
:
: 스트링그리드가 나오는 이유는, 클라이언트 스트링그리드의 값이 서버의 스트링그리드로 넘어가게 되어있어서 그렇습니다.
: 즉, 몇 개의 텍스트 박스에 입력하면 클라이언트 스트링그리드에 값이 들어가고, 이제 그 데이터를 모아서 서버로 보내면
: 그걸 서버에서 리스트박스에 임시 저장한 후에 서버 스트링그리드에 개시하는 프로그램입니다.
: 그러므로 스트링그리드에 대한 내용은 무시하셔도 됩니다요.
:
: 그리고 클라이언트소켓의 아이피를 지정해주는 명령어가
:
: ClientSocket->Address = "192.192.192.192";
:
: 이게 맞는지 잘 모르겠네요;
:
: 박지훈님이 써주신 내용은 "리스트 박스에서 아이피를 선택하는 방식" 을 설명해주신 것 같은데,
: 아쉽게도 제가 질문한 것과는 약간 다른것 같네요. 하지만 많은 도움이 되었고, 유용하게 쓰겠습니다 :)
:
:
:
:
: 박지훈.임프 님이 쓰신 글 :
: : 질문 내용이 잘 이해가 안됩니다. 혼란스럽네요.
: :
: : 만약 제가 제대로 짐작한 거라면... 리스트박스에 여러 아이피들이 나열되고, 그중 하나를 선택하면 그게 클라이언트 소켓의 Address 속성에 넣는 거 맞습니까? (그런데 스트링그리드가 갑자기 나오고 해서 그것도 아닌 거 같기도 하고..)
: :
: : 하여튼 제 짐작이 맞다면...
: : 보여주신 코드는 아이피 주소들이 줄줄줄 나열되어 있는 텍스트 파일을 불러들이는 코드와 그중 첫번째 항목을 클라이언트 소켓에 설정하는 코드입니다. 불러들이는 코드는 있는데, 당연히 일단 불러들인 후에 나중에 선택을 하겠죠? 그리고 아마도 OK 버튼 등을 눌렀을 때 처리하려는 것 아닌가요?
: :
: : 그렇다면, 예를 들어 OK 버튼을 눌렀을 때 처리하면 된다면, 옵션 폼이 나타날 때 다음 코드를 실행하고,
: : ListBox->Items->LoadFromFile("data.ini");
: :
: : 마지막에 OK 버튼의 이벤트 핸들러에서,
: : cs1->Address = ListBox->Items->String[ListBox->ItemIndex];
: : 이렇게 해주면 될 겁니다.
: :
: : 주의할 것은, 만약 사용자가 리스트박스를 한번도 클릭하지 않았다면 선택된 것이 없을 것이고 따라서 ListBox->ItemIndex 값이 -1이 됩니다. 그때 위 코드를 그냥 실행해버리면 실행하다가 List index out of bounds 에러가 발생할 겁니다. 따라서 -1이 아닌가를 검사하는 코드가 추가로 필요합니다.
: : if(ListBox->ItemIndex = -1)
: : {
: :     ShowMessage("IP 주소를 선택해주세요");
: :     return;
: : }
: : cs1->Address = ListBox->Items->String[ListBox->ItemIndex];
: :
: :
: : 승현 님이 쓰신 글 :
: : : 안녕하세요.
: : : 현재 만든 프로그램이, 클라이언트의 데이터를 서버로 개시하는 프로그램입니다.
: : : 그럼 클라이언트소켓에 서버의 어드레스를 설정해줘야 하는데,
: : : 이걸 옵션창을 이용해서 아이피 입력을 받아서 설정이 저장되어 그 아이피가 고정되게 해주려고 합니다.
: : : 쉽게말해서 메뉴에서 옵션에 들어가면, 서버 IP를 입력하는 탭이 있고 저장시키는 방식인데요.
: : : 지금 그냥 막연하게 리스트박스 하나 만들고, 거기에 LoadFromFile로 불러들여서 그렇게 불러들이고 있습니다.
: : :
: : : AnsiString ip;
: : : ListBox->Items->LoadFromFile("data.ini");
: : : ip = ListBox->Items->String[0];
: : : cs1->Address = ip;
: : : ListBox->Clear();
: : :
: : : 이런식으로 구성되어 있는데, 클라이언트소켓에 아이피가 지정이 안되더군요;
: : : 'ip'에는 값이 들어가 있는데, 저 명령어가 아닌것 같습니다만 감이 잘 안잡힙니다.
: : :
: : : 그 방법을 모르다보니 위에서처럼 달랑 IP만 써져있는 파일에 리스트박스에 불러들이는 방법을 사용하고 있네요.
: : : 위 방법을 쓰면, 지정되는 아이피가 하나만 필요한 클라이언트는 괜찮은데, 지정되는 아이피가 약 열개정도 되는
: : : 서버의 경우에는 파일을 여러개 만들수도 없고; 그래서 해당 파일의 몇번째 줄의 데이터를 뽑아내는 방법을 써야합니다.
: : : 즉 프로그램에서 보면,  ini파일에
: : :
: : : [ClientIP1]
: : : ip=192.192.192.192
: : :
: : : [ClientIP2]
: : : ip=123.123.123.123
: : :
: : : [ClientIP3]
: : : ip=000.000.000.000
: : :
: : : 이런식으로 저장되어서 1번 StringGrid 에 IP는 ClientIP1 이다, 2번은 ClientIP2다, 이런식으로 지정되게 해줘야 합니다.
: : : 허나 방법을 잘 모르겠네요; 가지고 있는 바이블을 뒤져봐도 해당문이 제대로 설명이 되어 있지 않은건지,
: : : 아니면 제가 찾지 못하는건지 머리만 아프더랍니다.
: : :
: : : 그래도 믿을만한곳이 볼랜드포럼밖에 없어서, 이렇게 염치없지만 질문을 드립니다 ;ㅅ;
: : : 많은 도움 부탁드리겠습니다.

+ -

관련 글 리스트
46736 옵션으로 IP 지정해주기에 대해서 승현 798 2006/10/11
46748     Re:옵션으로 IP 지정해주기에 대해서 박지훈.임프 1059 2006/10/12
46753         으음;; 다시 정리해서 재질문 드립니다. 승현 895 2006/10/12
46756             Re:으음;; 다시 정리해서 재질문 드립니다. 은진 아빠 1246 2006/10/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.