|
[답변 목차]
1. ini파일에 대해
2. ini파일 불러오기
3. ini파일의 ip-address를 ... 지정하기?
========================================
1. ini파일 형식에 대해
ini파일형식을 조금 변경하세요
ini형식은 key가 있어야하는데
[Client 1]
192.168.244.1 <== 요기에 Key name이 없네요
@형식1
; 저번에 질문처럼 아래와 같이 해도 되구요
[Client 1]
ip=192.168.244.1
[Client 2]
ip=192.168.244.2
[Client 3]
ip=192.168.244.3
@형식2
; 저라면 이렇게 할것 같아요
[CLIENT_IP_LIST]
Client1=192.168.244.1
Client2=192.168.244.2
Client3=192.168.244.3
형식2로 하는것이 형식1보다 ini파일에 쓰기도 편하고 읽러오기도 편해요
@형식3
[CLIENT_IP_LIST]
192.168.244.1=Client1
192.168.244.2=Client2
192.168.244.3=Client3
서버쪽에서는 접속한 Client Socket의 RemoteAddress를 보고
어떤 클라이언트인지 판단한다고 했으므로
형식3으로 하면 검색이 오히려 편해질수도 있겟네요
//아래와 같이 Config파일에서 읽어와 비교가 가능하니까요..
void __fastcall TCHANGE_METER::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
String sClientAddr=Socket->RemoteAddress;
String sClient=ConfigINI->ReadString("CLIENT_IP_LIST",sClientAddr,"");
if(sClient="Client1")
{
//...
}
else if(sClient="Client2")
{
//...
}
}
//---------------------------------------------------------------------------
======================================================
2. ini파일에서 iplist 읽어오기
; ini파일 이름이 exe파일의 위치에 "config.ini"라는 이름으로 있다고 합시다.
1) TIniFile * ConfigINI ; //폼의 Header에 선언
2) FormCreate이벤트에서..
ConfigINI=new TIniFiles("Config.ini"); //ini생성
3) ip 읽어오기 1 ( 형식2에서)
String sClient1Addr = ConfigINI->ReadString("CLIENT_IP_LIST","Client1","127.0.0.1");
String sClient2Addr = ConfigINI->ReadString("CLIENT_IP_LIST","Client1","127.0.0.1");
String sClient3Addr = ConfigINI->ReadString("CLIENT_IP_LIST","Client1","127.0.0.1");
4) ip읽어오기 2 (형식3에서)
String sClientName= ConfigINI->ReadString("CLIENT_IP_LIST",Socket->RemoteAddress,"");
5) ip읽어오기 3
TIniFile 클래스에는 ReadSections 함수와 ReadSectionValues 등의 함수가 있습니다.
section이름을 몰라도 섹션의 이름을 전부 불러오는 기능과
섹션이름을 몰라도 섹션의 value값을 전부 불러오는 기능입니다.
형식2의 경우
TStringList *sIpList=new TStringList ;
ConfigINI->ReadSections("CLIENT_IP_LIST",slpList); // 섹션이름을 읽어옴
ConfigINI->ReadSectionValues("CLIENT_IP_LIST",slpList); //섹션값을 전부 읽어옴
위와 같은 형식으로 한번에 불어올수도 있습니다.
3. ini파일의 ip-address를 ... 지정하기?
솔찍히 님의 말이 잘 이해가 오지않는 부분이 잇습니다.
: 클라이언트 소켓에 어드레스를 변경하는 코딩을 하려고 합니다.
: 원래의 어드레스값이 있고, 처음 시작할때 텍스트 박스로 아이피 값을 받아서
: 바꾸어 주는 프로그램이 필요하기 때문인데요.
:
: 간단하게 써서
:
: cs->Address = "192.192.192.192";
Client소켓의 address를 변경하다니 그게 가능한 말인지?
아니면 Client의 RemoteAddress를 보고 파일의 ip 설정을 바꾼다는 말씀인지?
: 같은 형식으로 저장이 되고, 서버 프로그램 구동시에 클라이언트1의 아이피 값은 이거다.
: 라고 알려주는 형식이죠.
: 그런데 클라이언트1의 아이피는 192..다! 저렇게 지정해주는 법을 모르겠습니다;
: 도움을 주시면 감사하겠습니다. 이게 시일을 다투는건데 잘 알지 못하니 너무 답답하네요.
맨마지막글을 볼때 프로그램이 Client 아이피에 해당하는 Clinet를 알려주는 기능같은데...
이는 위에 ini파일에서 읽어오는 형식만 잘 참조하면 될것 같습니다.
Client 에따라 수신데이타를 뿌려주는 StringGrid가 다르게 뿌려주고 싶다고 했는데....
Program 스타트할때 파일의 정보를 읽어와서
Client가 Connect할때 어떤 Grid에 뿌려주는지 link할수도 있고
그냥
Client가 Connect할때 파일에서 정보를 읽어와서 어떤 Grid에 뿌려주는지 link할수도 있고
아니면 SocketRead할때마다 Client의 RemoteAddress를 확인하는 방법도 있구요...
시드데이비스 님이 쓰신 글 :
: 안녕하세요.
: 클라이언트 소켓에 어드레스를 변경하는 코딩을 하려고 합니다.
: 원래의 어드레스값이 있고, 처음 시작할때 텍스트 박스로 아이피 값을 받아서
: 바꾸어 주는 프로그램이 필요하기 때문인데요.
:
: 간단하게 써서
:
: cs->Address = "192.192.192.192";
:
: 라고 지정해주고 에디트박스에 클라이언트 소켓의 아이피를 출력하라고 했는데
: 안되더군요; 에러는 어드레스 값이 비어있다고 나오구요(처음에 따로 지정 안해줌).
:
: 또한 예전에도 질문했었는데 뱀다리 건너 하나 더 질문하겠습니다;
: 현재 클라이언트는 서버에 대한 아이피와 포트를 바꿔 주는것만으로 되는데
: 서버의 프로그램이 클라이언트의 아이피를 지정해줘서 받는 타입입니다.
: 즉, 192.168.244.1 이라는 곳에서 데이터를 받으면 StringGrid1에 개시되고
: 192.168.244.2 이라는 곳에서 데이터를 받으면 StringGrid2에 개시되는 형식이죠.
:
: 그러기 위해서는 ini파일 같은 아이피 내용이 저장 파일을 만들어서
: 프로그램 구동시에 그 파일의 아이피 값을 받아서 지정해주는 형식으로 만들고 싶습니다.
:
: 그럼 ini 파일 내에서는
:
: [Client 1]
: 192.168.244.1
:
: [Client 2]
: 192.168.244.2
:
: [Client 3]
: 192.168.244.3
:
: 같은 형식으로 저장이 되고, 서버 프로그램 구동시에 클라이언트1의 아이피 값은 이거다.
: 라고 알려주는 형식이죠.
: 그런데 클라이언트1의 아이피는 192..다! 저렇게 지정해주는 법을 모르겠습니다;
: 도움을 주시면 감사하겠습니다. 이게 시일을 다투는건데 잘 알지 못하니 너무 답답하네요.
|