Difference between revisions of "Networking"

From Lazarus wiki
(Other networking tutorials)
(Web Service Toolkit for FPC & Lazarus)
Line 133: Line 133:
 
=== Web Service Toolkit for FPC & Lazarus ===
 
=== Web Service Toolkit for FPC & Lazarus ===
 
[[Web Service Toolkit]] is a web services package for FPC and Lazarus.
 
[[Web Service Toolkit]] is a web services package for FPC and Lazarus.
 +
 +
 +
[[XML Tutorial]]
  
 
== External Links ==
 
== External Links ==

Revision as of 17:29, 25 November 2008

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

This page will be the start for tutorials with regard to network programming with Lazarus. I am not an expert on networking programming and I will add to the article as I learn about it. I invite others to help create networking articles. Just add a link to the next section, add a page and create your own WiKi article. On this page some general information will be given.

Other networking tutorials

TCP/IP Protocol

Webserver example

Bellow there is an example http server written with Synapse and tested in Mac OS X, after changing the synapse source to use a fixed constant $20000 as MSG_NOSIGNAL, because this constant isn't present in the sockets unit in Mac OS X.

<delphi> {

 The Micro Pascal WebServer
 This is a very simple example webserver implemented with the Synapse library.
 It works with blocking sockets and a single thread, so it
 can only handle one request at a given time.
 It will write the headers that it receives from the browser
 to the standard output.
 It serves a fixed webpage for the / URI
 For any other URI it will return 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:');
 //read request line
 s := ASocket.RecvString(timeout);
 WriteLn(s);
 method := fetch(s, ' ');
 uri := fetch(s, ' ');
 protocol := fetch(s, ' ');
 //read request headers
 repeat
   s := ASocket.RecvString(Timeout);
   WriteLn(s);
 until s = ;
 // Now write the document to the output stream
 if uri = '/' then
 begin
   // Write the output document to the stream
   OutputDataString :=
     '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
     + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF

+ '<html>

Teste

</html>' + CRLF;

   // Write the headers back to the client
   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;
   // Write the document back to the browser
   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. </delphi>

WebServices

According to the W3C a Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface that is described in a machine-processable format such as WSDL. Other systems interact with the Web service in a manner prescribed by its interface using messages, which may be enclosed in a SOAP envelope, or follow a REST approach. These messages are typically conveyed using HTTP, and are normally comprised of XML in conjunction with other Web-related standards. Software applications written in various programming languages and running on various platforms can use web services to exchange data over computer networks like the Internet in a manner similar to inter-process communication on a single computer. This interoperability (e.g., between Windows and Linux applications) is due to the use of open standards. OASIS and the W3C are the primary committees responsible for the architecture and standardization of web services. To improve interoperability between web service implementations, the WS-I organisation has been developing a series of profiles to further define the standards involved.

Web Service Toolkit for FPC & Lazarus

Web Service Toolkit is a web services package for FPC and Lazarus.


XML Tutorial

External Links