2013-01-03 2 views
1

Windows 양식에서 ScktComp 및 Winsock을 사용하여 채팅 서버를 만들었습니다. 콘솔 응용 프로그램에서 어떻게 동일한 작업을 수행 할 수 있습니까?Delphi의 콘솔 응용 프로그램에 Windows 양식을 이식하는 방법

나는 이것을 starting point으로 찾았지만 스레드의 작성자가 "거의 완벽한 답변"이라고 대답 한 내부 링크는 만료되었습니다.

콘솔 앱에 ServerSocketClientConnect/ClientSocketConnect의 다른 메소드가 있나요?

+0

매우 광범위합니다. 어떤면이 당신을 괴롭 히고 있습니까? –

+0

해당 페이지의 링크는 사이트의 포럼 소프트웨어가 2002 년 3 월과 오늘 3 월 사이에 URL 구조를 변경했기 때문에 좋지 않습니다. 관련 게시물이 여전히 있습니다. [이 코드의 문제점은 무엇입니까? by bwd.net] (http://www.delphipages.com/forum/showthread.php?t=37770) 및 [검색 페이지] (http://www.delphipages.com/forum/search.php)와 검색 구문 '^ gLes TMyEvents' (즉, TMyEvent에 관한 사용자 gLes의 게시물). –

답변

3

델파이는 콘솔 애플리케이션에서 동일한 클래스와 비 시각적 컴포넌트를 사용합니다. 사용하는 클래스를 변경할 필요는 없지만 Delphi IDE를 사용하여 코드를 생성하는 대신 수동으로 입력하여 유닛에 추가하는 방법을 배워야합니다.

아래 단계를 사용하여 직접 만들거나 비 시각적 구성 요소가 포함 된 VCL Win32 GUI 응용 프로그램을 사용하는 동안 이미 구성된 데이터 모듈을 콘솔 응용 프로그램에서 사용할 수 있습니다.

단계 : uses 절에 사용할 클래스 또는 구성 요소가 포함

  1. 추가 단위 이름. 이 클래스 인 것처럼

  2. 구성 요소를 구축 :

    var 
        aSomething:TSomething; 
        begin 
        aSomething := TSomething.Create(Parameter1,Parameter2); 
        end; 
    
  3. 하는 적절한 장소에 그것을 확보해야합니다.

     aSomething.Free; 
    

그러나 나는 당신이 장난감, 또는 실험 등의보다, 콘솔 응용 프로그램에 다른 채팅 서버를 설정하려는 이유를 이해하는 어려움이있다. 실제 사용에서는 아마 Win32 GUI를 원할 것입니다. 그렇지 않으면 APPTYPE을 콘솔로 변경하지 않고 만들 수있는 완전히 시각적이지 않은 서비스 (NT 스타일 서비스)가 필요하지만 GUI없이 실행될 수 있습니다. 그렇지만.

콘솔 응용 프로그램을 작성할 때 볼 수있는 가장 중요한 실제 이유는 빌드 도우미 유틸리티와 같이 명령 줄에서 유용한 것들을 작성하는 것입니다. 콘솔 응용 프로그램을 만드는 것은 그 자체로 매우 쉽습니다. 새로운 빈 콘솔 애플리케이션을 생성하고, 빈 파스칼 단위를 새로 추가하고, 메인 메소드를 만든 다음, 작업중인 메인 유닛의 uses 절에 원하는 단위 이름을 추가하십시오. 그게 전부입니다.

현재 사용하고있는 서버 소켓과 클라이언트 소켓을 계속 사용할 수 있습니다. 콘솔 앱을 잊어 버릴 것을 제안하고 싶지만 실제로 필요한 경우가 아니라면 개발과 작동을 모두하고 있기 때문에 프로그램을 실제 목적으로 사용하기가 더 어려워졌습니다. 콘솔 응용 프로그램에서 컴포넌트 나 클래스를 사용하기 위해 컴포넌트 나 클래스를 변경할 필요는 없지만 GUI 나 콘솔과 마찬가지로 Delphi의 "인터넷"탭에있는 TTcpClient와 TTcpServer 컴포넌트는 실제 사용에 적합하지 않습니다. 모든 실제 응용 프로그램. 이전 버전과의 호환성을 위해 존재하며 "오래된 버전"으로 간주되고 "더 이상 심각한 방법으로 사용되지 않아야합니다".

에서 실제 사용하기에 적합하지 않을 수도 있습니다 컴포넌트 팔레트의 "인터넷"페이지에서 해당 구성 요소 이외의 실제 TCP/모든 인디, ICS, 시냅스, 또는 아무것도, 아무것도 같은 IP 라이브러리에서

봐 "장난감"이외의 규모.

+0

Windows 특정 콘솔 TCP/IP 데모에 관심이있는 경우 ICS에는 몇 년 동안 사용할 수있는 훌륭한 세트와 프레임 워크가있었습니다. 메시지 펌프를 만들어야하기 때문에 더 복잡 할 수 있습니다. ICS TApplication 파생물은 귀하를 대신합니다 (단위 합산은 IIRC라고합니다). 다른 소켓을 사용하는 경우에도 체크 아웃 할 가치가 있습니다 –

+0

조언을 주셔서 감사합니다. 내가 찾던 시작 아이디어입니다. – Eduard

-1

일부 VCL 클래스에는 Windows 메시지 루프 및/또는 창 핸들이 필요합니다. 따라서 응용 프로그램 유형을 변경하면 작업이 중단 될 수 있습니다.

또한 기존 코드가 synchronize을 사용하여 VCL 주 스레드에서 코드를 실행하는지 확인하십시오. 비 VCL 응용 프로그램에서 동기화를 사용하면 dangerous이 될 수 있습니다.

+0

콘솔 앱에서 INDY가 잘 작동하는지 알고 있습니까? 나는 TTimer가 메시지 핸들을 필요로한다는 것을 알고 있지만 CONSOLE 어플리케이션에서 여전히 Win32 메시지 핸들을 가질 수있다. VISIBLE 창을 만들 수 없습니다. 나는 AppType이 CreateWindow에 대한 호출을 막지 않는 CONSOLE이기 때문에 그렇게 확신한다. :-) –

+0

@WarrenP 예, 콘솔 응용 프로그램 또는 서비스에서 Indy TCP 클라이언트를 사용합니다. 일반적으로 비동기 Winsock API 메서드가 사용되지 않는 한 Windows 핸들이 필요하지 않습니다. – mjn

관련 문제