Networking/ko

From Free Pascal wiki

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) português (pt) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

이 페이지는 라자루스를 이용한 네트워크 프로그래밍에 대한 튜토리얼의 시작이 된 것이다. 나는 네트워킹 프로그래밍에 대한 전문다도 아니므로 내가 배운대로 문서들을 더 할 것이다. 내트워킹 문헌을을 만드는데 도움을 얻고자 다른 사람들의 도움을 청하였다. 다음 섹션에 링크를 더하기만 하면 되며 페이지를 더하고 자싱의 WiKi 문서를 만들면 된다. 이 페이지에서 몇몇 일반적인 정보들을 제시할 것이다.

다른 네트워킹 튜토리얼

TCP/IP 프로토콜

웹서버 에제

아래에 Synapse로 작성되고 Mac OS X 에서 테스트한 http 서버 예제가 있다. 미리 정의된 상수 NOSIGNAL ($20000) 을 사용하기 위하여 Synapse 소스를 변경한 후 테스트 하였으며, 이는 이 상수가 Mac OS X 의 소켓 유닛에 존재하지 않기 때문이다.

{
  마이크로 파스칼 웹서버

  이것은 Synapse 라이브러리로 구현한 매우 간단한 웹서버의 예제이다.

  이것은 블러킹 소켓 및 단일 쓰레드로 동작하므로, 동시에 한개의 응답만을 처리할 수 있다.

  이것은 브라우저로 부터 받은 헤더를 표준 출력으로 쓰게 될 것이다.

  이것은 / URO에 대한 고정된 웹 페이지를 서비스 한다.
  다른 URO에 대해서는 504 not found를 돌려준다.
}
program upserver;

{$ifdef fpc}
  {$mode delphi}
{$endif}

{$apptype console}

uses
  Classes, blcksock, sockets, Synautil, SysUtils;

{@@
  Attends a connection. Reads the headers and gives an
  appropriate response
}
procedure AttendConnection(ASocket: TTCPBlockSocket);
var
  timeout: integer;
  s: string;
  method, uri, protocol: string;
  OutputDataString: string;
  ResultCode: integer;
begin
  timeout := 120000;

  WriteLn('Received headers+document from browser:');

  //응답 라인을 읽는다
  s := ASocket.RecvString(timeout);
  WriteLn(s);
  method := fetch(s, ' ');
  uri := fetch(s, ' ');
  protocol := fetch(s, ' ');

  //응답 헤더를 읽는다
  repeat
    s := ASocket.RecvString(Timeout);
    WriteLn(s);
  until s = '';

  // 문서를 출력 스트림에 쓴다

  if uri = '/' then
  begin
    // 출력 문서를 스트림에 쓴다
    OutputDataString :=
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
      + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
      + '<html><h1>Teste</h1></html>' + CRLF;

    // 헤더를 다시 클라이언트에 쓴다
    ASocket.SendString('HTTP/1.0 200' + CRLF);
    ASocket.SendString('Content-type: Text/Html' + CRLF);
    ASocket.SendString('Content-length: ' + IntTostr(Length(OutputDataString)) + CRLF);
    ASocket.SendString('Connection: close' + CRLF);
    ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF);
    ASocket.SendString('Server: Servidor do Felipe usando Synapse' + CRLF);
    ASocket.SendString('' + CRLF);

  //  if ASocket.lasterror <> 0 then HandleError;

    // 문서를 다시 브라우저에 쓴다
    ASocket.SendString(OutputDataString);
  end
  else
    ASocket.SendString('HTTP/1.0 504' + CRLF);
end;

var
  ListenerSocket, ConnectionSocket: TTCPBlockSocket;
begin
  ListenerSocket := TTCPBlockSocket.Create;
  ConnectionSocket := TTCPBlockSocket.Create;

  ListenerSocket.CreateSocket;
  ListenerSocket.setLinger(true,10);
  ListenerSocket.bind('0.0.0.0','1500');
  ListenerSocket.listen;

  repeat
    if ListenerSocket.canread(1000) then
    begin
      ConnectionSocket.Socket := ListenerSocket.accept;
      WriteLn('Attending Connection. Error code (0=Success): ', ConnectionSocket.lasterror);
      AttendConnection(ConnectionSocket);
    end;
  until false;

  ListenerSocket.Free;
  ConnectionSocket.Free;
end.

웹 서비스

W3C에 따르면 웹서비스는 네트워크 상에서 기계 대 기계 간에 상호 동작할 수 있도록 디지안 된 소프트웨어 시스템이다. 이에는 WSDL 처럼 기계가 접근할 수 있는 포맷을 기술한 인터페이스가 있다. 다른 시스템들은 메세지를 사용한 인터페이스를 통해 사전에 기술된 방법으로 웹서비스와 상호 작용하며, 이는 SOAP 엔벨로프 안에 있게 되거나, REST 접근 방법을 따르게 된다. 이 메세지들은 전형적으로 HTTP를 사용하하여 전송되며, 다른 웹-에 연관된 표즌들과 결합한 XML로 구성되는 것이 보통이다. 다양한 프로그래밍 언어와 다양한 싱행 플랫폼의 응용 소프트웨어들은 웹서비스를 인터넷 같이 컴퓨터 네트워크를 초월하는 데이터를 교환하는데 이용하는데 이는 단일 컴퓨터상에서 프로세스간에 통신하는 것과 유사하다. 이러한 항호 운용성은 (예를 들어, 윈도우와 리눅스 프로그램간) 오픈된 표즌을 이용하기 때문에 가능한 것이다. OASIS화 W3C는 웹서비스의 구조와 표준화에 대한 책임을 지고 있는 일차적인 위원회이다. 웹서비스 구현간의 상호 운용성을 증가 시키기 위해 WS-I 협회는 추가적인 표준을 포함하는 프로파일 시리즈를 개발 중이다.

FPC 및 라자루스를 위한 웹 서비스 툴킷

웹 서비스 툴킷 은 FPC와 라자루스를 위한 웹서비스이다.


XML 튜토리얼

외부 링크