Q&A

  • 소켓으로 개발할려고 하는데 잘안되요.. 도움을..
소켓 프로그램 개발해 보셧어요?

안녕하세요 하얀까마귀입니다.

도움을 좀 주세요..



제가 지금 MIDAS를 이용해서 프로그램을 짤려고 하거든요...

(Midas 전혀 모름... iti강좌를 읽고 책조금보고(책도 거의 내용이 없어요)

이제 예제 몇개 만들어본 수준임)



음.. 그런데.. 테스트를 해보니까

단독 컴퓨터나 lan에서는 작동을 하던데... TCP/Ip로 연결해서

할때는 어떤식으로 하죠?? 잘 안되는것 같던데...

그리고 모뎀도 고려를 해야 하거든요.



/-----------------------------------



그래서 제가 생각한 방법이 소켓을 이용해서 데이타 전송을 받고

그걸 ClientDataSet으로 읽어들여서 보구요 변경이나 저장등의

기능또한 소켓으로 전송해서 구현할려고 하거든요???

이거 너무 일이 많을것 같죠????

테이블이 한두개도 아니고.. 각각 전부 소켓으로 인터페이스를 구현할

생각을 하니 막막하네요..



그래서 여기저기 들쑤시면서 괜찮은 방법을 찾고 있어요...



- 환경을 설명드리면.

개발할려는 프로그램은 클라이언트에는 BDE나 DB를 설치하지 않고

그냥 프로그램만 설치될겁니다. 그렇게해서 실시간으로 데이타의 조회나

저장, 수정또한 가능해야 하거든요? 물론 모뎀접속이나 전용선등으로

TCP/IP로 물리겠죠...

물론 서버에는 DB가 설치되어 있고... 꼭 소켓이 아니어도 되고 그냥 보통 어떤

식으로 구현하는지도 몰라서..



그래서 클라이언트에서 소켓으로 조건등을 전송하면 서버 프로그램에서

DB를 검색해서 결과를 소켓으로 전송하는 방식으로 테스트를 했는데..

작동은 잘하는데 일이 너무 많아서.. 흑흑...

이것 밖에는 없는지요...



아!! 그리고 Midas Page에 있는 SocketConnection 하고

ServerSocket 과 ClientSocket과는 어떻게 다르죠????

전 ClientSocket으로 했거든요...

아시는분 있으시면 가르쳐 주세요..













2  COMMENTS
  • Profile
    fallroot 2000.02.11 11:21
    안녕하세엽. ^^

    멜루 보내신 내용은 잘 받았습니다.

    거두절미하구 간단하게 설명 올리겠습니다.



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

    // Server

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



    Remote Data Module에 올려놓는 컴포넌트들입니다.

    컴포넌트 이름으로 쓰기루 하져.

    괄호안에 적어준 갯수는 컴포넌트 갯수들입니당.

    물론 실행시에 속성들을 변경시켜가면서 쓰면 몇 개 안 가지구두 쓸 수 있지만...



    - Database (1개)

    AliasName: 디비 서버랑 연결시키면 되져.

    DatabaseName: 다른 컴포넌트에서 이용할 이름

    Name: 컴포넌트 자체 이름

    - Session (1개)

    Active: True

    AutoSessionName: False

    - Query (수십개 --;)

    DatabaseName: Database컴포넌트의 DatabaseName속성(콤보박스에 있을겁니다)

    SQL: 질의문

    ** Export를 반드시 시켜줘야겠져.



    - 그 담에 서버를 한 번 실행시켜주면 클래스가 레지스트리루 날라갑니당.

    레지스트리에서 Borland DataBroker로 찾아보심 등록된 클래스들을 보실 수 있으실 겁니다. 맘에 안드는 클래스들은 거기서 없애줘두 상관없죠.



    - Query말구두 Table이나 StoredProc두 쓸 수 있져.

    Table은 웬지 맘에 안 들구 -.-

    StoredProc은 디비안에 심어놓은 프로시져를 불러다 쓰는 겁니당.



    - 위의 세 컴포넌트들이랑 연결해서 TProvider를 쓸 수 있는데요.

    요놈은 Data Broker를 이용할 때 써먹기두 하구여. 없어두 되져. --;



    - 질의문으루 부족한 것들은 함수나 프로시져를 만들어서 써야겠져.

    이것들은 Type Library를 통해서 작성해 주어야 함당. (View메뉴에 있져)



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

    // Client

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



    간단하게 DBGrid에다 데이타를 연결해보져.

    배치할 컴포넌트들은여.

    역쉬 이름으루 하겠습니당.

    갯수두 서버랑 같은 의미임당. 역쉬 몇 개 안 가지구두...퍽... -.*



    - SocketConnection (딱 1개)

    Address: 여기다가 서버 IP를 적어주면 됩니당

    ServerName: IP를 입력한 담에 콤보박스에 Remote Date Module을 만들때 적어주신

    이름을 입력하세여. 거기에 레지스트리에 등록된 서버이름들이 다 뜨겠져.



    - ClientDataSet (받아올 Query만큼이나 -.-)

    RemoteServer: SocketConnection 컴포넌트 이름을 넣어줍니다

    이 자리에 ~Connection으루 끝나는 컴포넌트들이 들어가져.

    ProviderName: 서버에서 Export시켜준 Query를 사용하져.



    - DataSource (ClientDataSet보담은 적겠져. 룩업으로 쓰는 CDS따위두 있을 테니깐)

    DataSet: ClientDataSet컴포넌트 이름



    - DBGrid (맘대루 쓰시져. ^^)

    DataSource: DataSource컴포넌트 이름



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



    - 이제 ClientDataSet컴포넌트의 Active속성을 True로 바꾸시믄

    서버두 뜨구 데이타두 보이겠져.



    - 굳이 ClientSocket을 쓸 필요가 있나 싶네여.

    디비가 얼마나 큰 건지는 모르겠지만 속성들 잘 조절하시믄 이 정도로도 될 듯 한데여.

    ClientSocket은 TCustomSocket에서 가져온 소켓을 이용하는 컴포넌트구여.

    SocketConnetion은 이런 다중 계층에서 쓸라구 저멀리 TCustomRemoteServer에서 태어난 종자가 아예 다른 놈이걸랑여.



    구럼 허접 프로그래머 폴룻은 이만~~~~~

    즐프하세엽. ^^;

  • Profile
    fallroot 2000.02.11 06:19
    하얀까마귀 wrote:

    > 소켓 프로그램 개발해 보셧어요?

    > 안녕하세요 하얀까마귀입니다.

    > 도움을 좀 주세요..

    >

    > 제가 지금 MIDAS를 이용해서 프로그램을 짤려고 하거든요...

    > (Midas 전혀 모름... iti강좌를 읽고 책조금보고(책도 거의 내용이 없어요)

    > 이제 예제 몇개 만들어본 수준임)

    >

    > 음.. 그런데.. 테스트를 해보니까

    > 단독 컴퓨터나 lan에서는 작동을 하던데... TCP/Ip로 연결해서

    > 할때는 어떤식으로 하죠?? 잘 안되는것 같던데...

    > 그리고 모뎀도 고려를 해야 하거든요.

    >

    > /-----------------------------------

    >

    > 그래서 제가 생각한 방법이 소켓을 이용해서 데이타 전송을 받고

    > 그걸 ClientDataSet으로 읽어들여서 보구요 변경이나 저장등의

    > 기능또한 소켓으로 전송해서 구현할려고 하거든요???

    > 이거 너무 일이 많을것 같죠????

    > 테이블이 한두개도 아니고.. 각각 전부 소켓으로 인터페이스를 구현할

    > 생각을 하니 막막하네요..

    >

    > 그래서 여기저기 들쑤시면서 괜찮은 방법을 찾고 있어요...

    >

    > - 환경을 설명드리면.

    > 개발할려는 프로그램은 클라이언트에는 BDE나 DB를 설치하지 않고

    > 그냥 프로그램만 설치될겁니다. 그렇게해서 실시간으로 데이타의 조회나

    > 저장, 수정또한 가능해야 하거든요? 물론 모뎀접속이나 전용선등으로

    > TCP/IP로 물리겠죠...

    > 물론 서버에는 DB가 설치되어 있고... 꼭 소켓이 아니어도 되고 그냥 보통 어떤

    > 식으로 구현하는지도 몰라서..

    >

    > 그래서 클라이언트에서 소켓으로 조건등을 전송하면 서버 프로그램에서

    > DB를 검색해서 결과를 소켓으로 전송하는 방식으로 테스트를 했는데..

    > 작동은 잘하는데 일이 너무 많아서.. 흑흑...

    > 이것 밖에는 없는지요...

    >

    > 아!! 그리고 Midas Page에 있는 SocketConnection 하고

    > ServerSocket 과 ClientSocket과는 어떻게 다르죠????

    > 전 ClientSocket으로 했거든요...

    > 아시는분 있으시면 가르쳐 주세요..

    >



    안녕하세여.

    여기 돌아다니다 하얀까마귀님이 답변하신 내용들이 많은 것 같던데,

    아니 그런 고수들도 질문을? ^^;

    만족하시지는 못하시겠지만 제가 알고 있는 범위에서 답변드리지요.



    Midas 응용 프로그램을 짜려면 Application Server와 Client가 따로 있어야겠죠?

    DB는 다른 쪽에 있을테구여. 물론 셋 다 한 컴퓨터에서 돌려두 되져. --;



    우선 Server를 보면여. 이 쪽에는 Remote Data Module(이하 RDM)을 추가해야져.

    RDM에다가 Table이나 Query나 Stored Proc등의 TDataSet 컴포넌트들을 올려놓구여.

    물론 이 위에 TDatabase컴포넌트를 올려놓는게 편하겠져.TSession두 함께...

    TProvider를 TDataSet에 연결시켜두 되지만 그냥 TDataSet들만 있어두 됩니다.

    어쨌거나 중요한건 TDataSet컴포넌트들을 Export시켜주는 것이져.

    데이터들을 밖(Client)으로 보낼라구 만드는 서버니까여.

    이렇게 하면 서버는 끝입니다. 간단한 서버는 마우스만 갖구 20초 안에 끝나겠져. --;

    물론 더 넣자면 한도 끝도 없겠지만여.



    담은 Client쪽이겠져. 거꾸로 가보져. TDataControl 컴포넌트들(TDBGrid 따위들) 올려놓구 TDataSource 올려놓구여.

    그 담엔? 원래는 이 자리에 TDataSet 컴포넌트들(TTable, TQuery...)이 와야할 자리겠져. 근데 오면 안 되져. 그럴라구 마이다스 쓰는거 아니자나여. 구럼 흔한 2-Tier 프로그램이 되자나여. 클라이언트에 이게 와버리면 BDE나 ODBC 도라이버가 필요하니까 그러면 안 되겠져. 그래서 써야 하는 것이 Midas 페이지 첫번째에 당당하게 있는 TClientDataSet이져. 서버에서 날려보낸 데이터들이 이 곳에 쌓이는 것이져. 이거 하나만 있으면 만사해결이져. 300KB 조금 넘는 용량(dbclient.dll)에 BDE없이 DB를 건드릴 수 있으니깐여.

    그래서 TClientDataSet->TDataSource->TDataControl의 순서루 데이터들을 이용하는 거져.

    근데 서버랑은 어떻게 연결하쥐? --; TClientDataSet의 속성에 RemoteServer라는 것이 있져. 여기에 연결되서 Midas 페이지에 있는 잡다한 것들이 배치되는거져. 그건 입맛에 따라 맘대루 드세여. DCOM을 쓰시던 CORBA를 쓰시던 SOCKET을 쓰시던 MIDAS 커넥션을 쓰시던...

    그리구 TClientDataSet의 ProviderName속성에다가는 아까 Export시킨 TDataSet컨트롤들을 연결시키는 겁니당.



    부족한 설명이라 이해가 되실려나 모르겠네여. -.-

    보충이 필요하심 멜날리시던가 여기다 다시 올려주세여.



    글구여 ServerSocket이랑 ClientSocket이랑은 Internet페이지에 있지 않나여? 전 아직 4.0을 쓰구 있어서.. 바뀌었남? 그 둘은 구냥 TCP/IP 프로그람할때 써서리...

    음..그걸 갖구 DB프로그람을 하실라구 하시다니... 역쉬 고수당~~~ 어캐 하쥐? -_-