An Introduction to Network Programming with Java 1st Edition Jan Graba - Download the ebook now and read anytime, anywhere
An Introduction to Network Programming with Java 1st Edition Jan Graba - Download the ebook now and read anytime, anywhere
https://ebookfinal.com/download/simply-java-an-introduction-to-java-
programming-programming-series-1st-edition-james-levenick/
https://ebookfinal.com/download/java-an-introduction-to-problem-
solving-and-programming-7th-edition-walter-savitch/
https://ebookfinal.com/download/introduction-to-java-programming-
comprehensive-version-6th-edition-liang/
https://ebookfinal.com/download/an-introduction-to-programming-with-
mathematica-3rd-edition-paul-r-wellin/
Wireless Java Programming with J2ME 1st Edition Yu Feng
https://ebookfinal.com/download/wireless-java-programming-
with-j2me-1st-edition-yu-feng/
https://ebookfinal.com/download/beginning-programming-with-java-for-
dummies-third-edition-barry-burd/
https://ebookfinal.com/download/an-introduction-to-stata-
programming-2nd-edition-christopher-f-baum/
https://ebookfinal.com/download/introduction-to-3d-game-programming-
with-directx-10-1st-edition-frank-d-luna/
An Introduction to Network
Programming with Java
Jan Graba, BA, PGCE, MSc
Faculty of ACES
Sheffield Hallam University
UK
ISBN-10: 1-84628-380-9
ISBN-13: 978-1-84628-380-2
New and revised edition of An Introduction to Network Programming with Java published by Addison
Wesley, 2003, ISBN 0321116143
Sun, Sun Microsystems, the Sun Logo, the Java programming language, J2SE 5.0, and JavaBeans are
trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.
Microsoft, Encarta, MSN, and Windows are either registered trademarks or trademarks of Microsoft
Corporation in the United States and/or other countries.
Apart from any fair dealing for the purposes of research or private study, or criticism or review, as
permitted under the Copyright, Designs and Patents Act 1988, this publication may only be reproduced,
stored or transmitted, in any form or by any means, with the prior permission in writing of the publish-
ers, or in the case of reprographic reproduction in accordance with the terms of licences issued by the
Copyright Licensing Agency. Enquiries concerning reproduction outside those terms should be sent to
the publishers.
The use of registered names, trademarks, etc. in this publication does not imply, even in the absence of
a specific statement, that such names are exempt from the relevant laws and regulations and therefore
free for general use.
The publisher makes no representation, express or implied, with regard to the accuracy of the information
contained in this book and cannot accept any legal responsibility or liability for any errors or omissions
that may be made.
Whilst we have made considerable efforts to contact all holders of copyright material contained in this
book, we may have failed to locate some of them. Should holders wish to contact the Publisher, we will
be happy to come to some arrangement with them.
9 8 7 6 5 4 3 2 1
springer.com
Preface
The market in general-purpose Java texts is an exceptionally well populated one, as
can be seen from just a cursory examination of the programming language section of
any major bookshop. Surprisingly, the market in Java network programming texts is
a much less exploited one, featuring very few texts. It is true that the better general-
purpose Java texts provide some guidance on aspects of network programming, but
this almost invariably takes the form of rather superficial coverage, often relegated to
the end of the particular text and offering little more than an outline of the relevant
concepts. Even those few texts that are devoted specifically to network programming
in Java (and one or two are very good indeed) are rather thick tomes that are
probably of greatest use as reference texts. The truth of this assertion appears to be
reinforced by the absence of practical exercises from such texts.
When I began work on the first edition of this work, my declared intention was to
write a more 'streamlined' work that could serve equally as the core text on an
undergraduate module and as the quick, clear, 'no-nonsense' guide required by a busy
IT professional. Numerous examples and associated screenshots were provided, with
the examples 'stripped down' to their bare essentials in order to avoid overwhelming
the reader with too much detail. There is, of course, a level of detail below which it
is impossible to go without omitting some of the essentials and this led to a few
examples running over multiple pages. However, a conscious effort was made to
keep this to a minimum and to provide adequate program comments where this did
occur.
It was gratifying to find that the first edition was well received, but the time has
now come to replace it with an updated version. The changes in this second edition
fall into three categories:
Language Changes
These mostly affect the example programs and the model solutions provided on the
associated Web site. However, there are occasional, passing references to some of
these new features in the main body of the text where it is considered
appropriate. The main language changes introduced are listed below.
type 'wrapper' classes to convert String input into numeric values (a major
improvement on the traditional method for obtaining input).
• Associated with the above, replacement of the BufferedReader+FileReader
combination with Scanner+File and that of the PrintWriter+FileWriter
combination with PrintWriter+File for serial disc file I/O.
• Replacement of the cumbersome addWindowListener(new
WindowAdapter... method for closing down GUI applications with
setDefaultCloseOperation(EXIT_ON_CLOSE). (This had been available
since J2SE 1.3, but had deliberately not been included in the original text
due to the earlier method being the one still used by most people at that
time.)
• The formatting of numeric output (particularly decimal output) via method
printf.
• The inclusion of generics in the declaration of Vectors, with the associated
'auto-boxing' and 'auto-unboxing' of elements.
• Introduction of the 'enhanced for' loop where appropriate.
New Material
• Coverage of non-blocking I/O (introduced in J2SE 1.4), but retaining
coverage of the more traditional blocking I/O.
• The use of JDBC with the DataSource interface (also introduced in J2SE
1.4), but maintaining coverage of the more traditional DriverManager class
approach. The associated examples are no longer confined to the use of MS
Access, but have been extended to include MySQL. The significant
advantages to large-scale, commercial databases of using DataSource in
preference to DriverManager are made clear to the reader.
• As part of good practice, the above DataSource technique makes use of a
DAO (Data Access Object) to encapsulate access to the database, so that
data manipulation code is separated from business logic.
On the CD-ROM accompanying this text may be found the executable file for
installing J2SE 5.0 onto MS Windows platforms (available via free download from
the Sun site, of course). In addition to this, the CD contains all example code and
several media files (the latter for use with material in the final two chapters). Model
solutions for end-of-chapter exercises are accessible by lecturers and other
authorised individuals from the companion Web site (accessible via
http://homepage.ntlworld.com/jan.graba/javanet.html). Finally, there is a document
entitled Java Environment Installation that provides downloading and installation
Preface vii
instructions for those additional software elements for which permission for
inclusion on the CD was not forthcoming. This document also contains installation
instructions (and downloading instructions, which shouldn't be required) for J2SE
5.0 itself.
I sincerely hope that your programming experiences while using this text give you
some of the sense of satisfaction that I have derived from writing it. Of course, along
with such satisfaction comes the occasional (?) infuriating sense of frustration when
things just won't work, but you wouldn't want things to be too easy ... would you??
:-)
Jan
22nd Feb 2006
Contents
Learning Objectives
After reading this chapter, you should:
• have a high level appreciation of the basic means by which
messages are sent and received on modern networks;
• be familiar with the most important protocols used on networks;
• understand the addressing mechanism used on the Internet;
• understand the basic principles of client/server programming.
(by Web servers) and the downloading of files from servers' host machines via the
File Transfer Protocol (FTP servers). For the former service, the corresponding
client programs would be Web browsers (such as Netscape Communicator or
Microsoft Explorer). Though a client and its corresponding server will normally run
on different machines in a real-world application, it is perfectly possible for such
programs to run on the same machine. Indeed, it is often very convenient (as will be
seen in subsequent chapters) for server and client(s) to be run on the same machine,
since this provides a very convenient ‘sandbox’ within which such applications may
be tested before being released (or, more likely, before final testing on separate
machines). This avoids the need for multiple machines and multiple testing
personnel.
In some applications, such as messaging services, it is possible for programs on
users’ machines to communicate directly with each other in what is called peer-to-
peer (or P2P) mode. However, for many applications, this is either not possible or
prohibitively costly in terms of the number of simultaneous connections required.
For example, the World Wide Web simply does not allow clients to communicate
directly with each other. However, some applications use a server as an
intermediary, in order to provide ‘simulated ‘ peer-to-peer facilities. Alternatively,
both ends of the dialogue may act as both client and server. Peer-to-peer systems are
beyond the intended scope of this text, though, and no further mention will be made
of them.
For each port supplying a service, there is a server program waiting for any
requests. All such programs run together in parallel on the host machine. When a
client attempts to make connection with a particular server program, it supplies the
port number of the associated service. The host machine examines the port number
and passes the client’s transmission to the appropriate server program for
processing.
In most applications, of course, there are likely to be multiple clients wanting the
same service at the same time. A common example of this requirement is that of
multiple browsers (quite possibly thousands of them) wanting Web pages from the
same server. The server, of course, needs some way of distinguishing between
clients and keeping their dialogues separate from each other. This is achieved via the
use of sockets. As stated earlier, a socket is an abstract concept and not an element
of computer hardware. It is used to indicate one of the two end-points of a
communication link between two processes. When a client wishes to make
connection to a server, it will create a socket at its end of the communication link.
Upon receiving the client's initial request (on a particular port number), the server
will create a new socket at its end that will be dedicated to communication with that
particular client. Just as one hardware link to a server may be associated with many
ports, so too may one port be associated with many sockets. More will be said about
sockets in Chapter 2.
For example:
http://java.sun.com/j2se/1.5.0/download.jsp
Basic Concepts, Protocols and Terminology 5
For a well-known protocol, the port number may be omitted and the default port
number will be assumed. Thus, since the example above specifies the HTTP
protocol (the protocol of the Web) and does not specify on which port of the host
machine the service is available, it will be assumed that the service is running on
port 80 (the default port for Web servers). If the file name is omitted, then the server
sends a default file from the directory specified in the path name. (This default file
will commonly be called index.html or default.html.) The 'section' part of the URL
(not often specified) indicates a named 'anchor' in an HTML document. For
example, the HTML anchor in the tag
<A NAME="thisPlace"></A>
1.5 TCP
In common with all modern computer networks, the Internet is a packet-switched
network, which means that messages between computers on the Internet are broken
up into blocks of information called packets, with each packet being handled
separately and possibly travelling by a completely different route from that of other
such packets from the same message. IP is concerned with the routing of these
packets through an internet. Introduced by the American military during the Cold
War, it was designed from the outset to be robust. In the event of a military strike
against one of the network routers, the rest of the network had to continue to
function as normal, with messages that would have gone through the damaged router
being re-routed. IP is responsible for this re-routing. It attaches the IP address of the
intended recipient to each packet and then tries to determine the most efficient route
available to get to the ultimate destination (taking damaged routers into account).
However, since packets could still arrive out of sequence, be corrupted or even
not arrive at all (without indication to either sender or intended recipient that
6 An Introduction to Network Programming with Java
anything had gone wrong), it was decided to place another protocol layer on top of
IP. This further layer was provided by TCP (Transmission Control Protocol), which
allowed each end of a connection to acknowledge receipt of IP packets and/or
request retransmission of lost or corrupted packets. In addition, TCP allows the
packets to be rearranged into their correct sequence at the receiving end. IP and TCP
are the two commonest protocols used on the Internet and are almost invariably
coupled together as TCP/IP. TCP is the higher level protocol that uses the lower
level IP.
For Internet applications, a four-layer model is often used, which is represented
diagrammatically in Figure 1.1 below. The transport layer will often comprise the
TCP protocol, but may be UDP (described in the next section), while the internet
layer will always be IP. Each layer of the model represents a different level of
abstraction, with higher levels representing higher abstraction. Thus, although
applications may appear to be communicating directly with each other, they are
actually communicating directly only with their transport layers. The transport and
internet layers, in their turn, communicate directly only with the layers immediately
above and below them, while the host-to-network layer communicates directly only
with the IP layer at each end of the connection. When a message is sent by the
application layer at one end of the connection, it passes through each of the lower
layers. As it does so, each layer adds further protocol data specific to the particular
protocol at that level. For the TCP layer, this process involves breaking up the data
packets into TCP segments and adding sequence numbers and checksums; for the IP
layer, it involves placing the TCP segments into IP packets called datagrams and
adding the routing details. The host-to-network layer then converts the digital data
into an analogue form suitable for transmission over the carrier wire, sends the data
and converts it back into digital form at the receiving end.
Logical
Host-to-network layer
At the receiving end, the message travels up through the layers until it reaches the
receiving application layer. As it does so, each layer converts the message into a
form suitable for receipt by the next layer (effectively reversing the corresponding
process carried out at the sending end) and carries out checks appropriate to its own
Basic Concepts, Protocols and Terminology 7
protocol. If recalculation of checksums reveals that some of the data has been
corrupted or checking of sequence numbers shows that some data has not been
received, then the transport layer requests re-transmission of the corrupt/missing
data. Otherwise, the transport layer acknowledges receipt of the packets. All of this
is completely transparent to the application layer. Once all the data has been
received, converted and correctly sequenced, it is presented to the recipient
application layer as though that layer had been in direct communication with the
sending application layer. The latter may then send a response in exactly the same
manner (and so on). In fact, since TCP provides full duplex transmission, the two
ends of the connection may be sending data simultaneously.
The above description has deliberately hidden many of the low-level details of
implementation, particularly the tasks carried out by the host-to-network layer. In
addition, of course, the initial transmission may have passed through several routers
and their associated layers before arriving at its ultimate destination. However, this
high-level view covers the basic stages that are involved and is quite sufficient for
our purposes.
Another network model that is often referred to is the seven-layer Open Systems
Interconnection (OSI) model. However, this model is an unnecessarily complex one
for our purposes and is better suited to non-TCP/IP networks anyway.
1.6 UDP
Most Internet applications use TCP as their transport mechanism. Unfortunately, the
checks built into TCP to make it such a robust protocol do not come without a cost.
The overhead of providing facilities such as confirmation of receipt and re-
transmission of lost or corrupted packets means that TCP is a relatively slow
transport mechanism. For many applications (e.g., file transfer), this does not really
matter greatly. For these applications, it is much more important that the data arrives
intact and in the correct sequence, both of which are guaranteed by TCP. For some
applications, however, these factors are not the most important criteria and the
relatively slow throughput speed provided by TCP is simply not feasible. Such
applications include the playing of audio and video while the associated files are
being downloaded, via what is called streaming. One of the most popular streaming
technologies is called RealAudio. RealAudio does not use TCP, because of its large
overhead. This and other such applications use User Datagram Protocol (UDP).
UDP is an unreliable protocol, since:
UDP doesn't re-send a packet if it is missing or there is some other error, and it
doesn't assemble packets into the correct order. However, it is significantly faster
than TCP. For applications such as the streaming of audio or video, losing a few bits
of data is much better than waiting for re-transmission of the missing data. The
major objective in these two applications is to keep playing the sound/video without
8 An Introduction to Network Programming with Java
Learning Objectives
After reading this chapter, you should :
• know how to determine the host machine's IP address via a Java
program;
• know how to use TCP sockets in both client programs and server
programs;
• know how to use UDP sockets in both client programs and server
programs;
• appreciate the convenience of Java's stream classes and the
consistency of the interface afforded by them;
• appreciate the ease with which GUIs can be added to network
programs;
• know how to check whether ports on a specified machine are
running services;
• know how to use Java to render Web pages.
Example
import java.net.*;
import java.util.*;
II.
III.
Ma chi voglia frugare in fondo ai criteri, che ispirarono lo Stato
romano nei riguardi dell’istruzione; chi voglia intenderne
compiutamente il principio animatore non può sottrarsi ad un’assai
significativa constatazione, che s’impone al confronto delle cure e
della sorveglianza, che lo Stato antico ebbe, ed esercitò, con quelle,
avute ed esercitate, dagli Stati moderni.
Noi ci occupiamo della scuola e crediamo di operare al suo effettivo
incremento, sovvenendola, o correggendola, nei suoi elementi
oggettivi e impersonali; l’impero romano si occupò sovra tutto
dell’elemento soggettivo, del maestro e dello scolaro, e fu
elevandone la condizione, materiale e morale, ch’esso credette
giovare alla scuola e agli studii. Perciò noi ritroviamo, fino dai primi
tempi dell’impero, quella copia di immunità dai pubblici carichi e di
altri privilegi, di cui ad ogni passo sono onorati gl’insegnanti —
persino, qualche volta, gli eterni dimenticati, i maestri elementari.
Perciò noi li vediamo, nelle costituzioni imperiali del IV. secolo,
parificati, in onorificenze, ai più grandi dignitari dello Stato. Perciò il
loro ufficio, riguardato dapprima con disdegno e con diffidenza, tocca
rimunerazioni elevatissime, come, ad esempio quella assegnata ad
Eumenio in Gallia. Perciò, poco a poco, i maestri divengono gli
ispiratori della politica imperiale, e si dànno dei lunghi periodi, come
sotto Marco Aurelio, sotto Alessandro Severo, sotto Giuliano, in cui
essi possono ben dirsi i principi dello stato, dopo l’unico principe
effettivo. Perciò, dal II. secolo ai primi anni del IV., si suscita, e
fiorisce, quell’ampia distesa di istituzioni alimentari, che costituiranno
il terreno fecondatore della istruzione pubblica in questa età, nella
quale, allorchè non infieriranno eventi contrari, la coltura pubblica
raggiungerà il massimo della sua diffusione. Perciò, sin dal III.
secolo, noi vedremo assegnati dei privilegi e delle borse di studio ai
giovani studenti di questa o di quella disciplina, o di tutte le discipline
insieme. Conforme a tali criterii, conforme cioè al criterio che il bene
della scuola non si raggiunge con riforme di programmi e di
ordinamenti scolastici, ma con il merito e l’eccellenza dei maestri,
con il benessere degli scolari, l’insegnamento rimane libero da ogni
imposizione ufficiale. Il controllo dello Stato, o che lo Stato richiede
dai Comuni, si limita alla verifica della capacità, della diligenza e
della dignità della vita degl’insegnanti. Tutto il resto, programmi,
orarii, metodi, tutto, nello Stato antico, è di esclusiva spettanza del
maestro. E come l’insegnante, esente da ogni imposizione, è
responsabile solo degli effetti dell’opera sua, così manca ogni
responsabilità collettiva ed ogni forma di accordo didattico fra i vari
docenti di un unico istituto. Le scuole dell’antichità, che non
conferivano diplomi o attestati, che non conoscevano l’umiliante
soggezione degli esami, non avevano neanche bisogno di imporre e
di promuovere con artifici la diligenza dei maestri e l’efficacia del loro
insegnamento. La scuola allora poteva bene avere un’anima, e fu
vero peccato che, per la mancanza di questa intima virtù, che non
infondono nè la scienza, nè l’ufficio, ma l’indole personale dei
maestri e la vita storica circostante; per questa deficienza spirituale,
che tanto faceva fremere Giuliano, i docenti abbiano, da così grande
libertà, ritratto una copia sempre minore di vantaggi effettivi.
Venne l’ora, in cui tutto questo ebbe termine, o si volle almeno che
avesse termine. Quando, in una grigia giornata invernale,
Giustiniano fissò schematicamente i programmi delle poche scuole
riconosciute di giurisprudenza, inaugurò quell’obbligo, di cui
grandissimi, sono, insieme con i pregi, i difetti, e che impera tuttavia
nelle scuole pubbliche dei paesi latini e degli altri che hanno avuto la
malinconia di imitarli, l’obbligo — dico — di una scuola, la cui
essenza più intima e più gelosa si sia voluta ufficialmente plasmare.
IV.
V.
VI.
VIII.
Dietro il Senato e l’imperatore, che rappresentano i due poteri
dirigenti, noi ne aspetteremmo ancora altri, quali esecutori della loro
rispettiva volontà, nel campo della pubblica istruzione. Se non che, a
reggere il nuovo organismo amministrativo, che si era venuto
formando, lo Stato non sentì vivo il bisogno di destinarvi un apposito
congegno burocratico.
I nuovi uffici, creatisi a corte in quell’età dell’impero romano, in cui
l’autorità assoluta del principe cominciò a farsi valere anche nelle
forme esteriori, differiscono dai nostri, in quanto riguardano, non un
genere di lavoro determinato, ma la forma comune di lavori diversi,
non assolutamente separati nè distintamente assegnati. È questo il
motivo, per cui noi non troviamo, in questo tempo, un nucleo di
amministrazione centrale, che degnamente risponda al nuovo
servizio e, meno ancora, delle apposite amministrazioni provinciali
per la pubblica istruzione.
L’unico ufficio infatti, che, nella vecchia capitale dell’impero, ci
apparisca fornito di tali caratteri, è quello dell’a studiis, ma, se
l’oscurità, che avvolge le sue funzioni direttive scolastiche, è prova
della sua scarsa importanza, almeno al confronto delle nostre
aspettative, è altresì degno di rilievo il fatto che l’a studiis non
incombeva soltanto sulle cose della pubblica istruzione, nè la durata
della sua carica oltrepassò il regno di Costantino [851]. Nel momento
cioè, del maggiore sviluppo della politica scolastica dell’impero,
l’unico ufficio, che direttamente la riguardava, dispare [852] o si
confonde con altri di specie diversa, [853] e la direzione suprema
delle cose della pubblica coltura rimane alla mercè dei mutevoli
suggerimenti e dell’opera di questo o di quel ministro, qualunque
carica essi rivestano, sì che, allorquando Giustiniano sopprimerà
buona parte delle scuole dell’impero, noi apprenderemo con
meraviglia che consigliere di quel gravissimo provvedimento era
stato soltanto il prefetto di Costantinopoli [854].
In modo analogo, fuori della Corte ci troviamo dinanzi a una serie di
attribuzioni scolastiche, assegnate a questo o a quel magistrato
civile, non dinanzi a una vera e propria amministrazione scolastica.
Le persone, incaricate della cura e della trattazione degli affari,
relativi all’istruzione pubblica, furono i praefecti urbi, coi loro
dipendenti nelle due città regie, esecutori tanto della volontà
dell’imperatore come di quella del senato [855], i governatori, col
personale loro dipendente, nelle provincie, o, più tardi, nelle
prefetture; talora, anche, in qualche sede speciale, per l’ultima età
dell’impero, le autorità ecclesiastiche [856].
Questi sono i naturali destinatari, delle numerose costituzioni
imperiali, relative ai professori, agli studenti e alle cose dell’istruzione
pubblica in genere. Ma una distinzione di attribuzioni tra il praefectus
urbi e le autorità provinciali o il prefetto del pretorio non esiste. Ciò
che determina la differenza delle loro funzioni è solo il diverso
àmbito territoriale, su cui si esplicano le rispettive competenze
amministrative. Il praefectus urbi si incarica della sorveglianza
disciplinare sui maestri, di Roma e di Costantinopoli, cui ha facoltà di
infliggere pene determinate; [857] si incarica della manutenzione degli
edifici scolastici di proprietà dello Stato; dell’assegnazione a ciascun
docente di un determinato locale nell’università cittadina; [858], e,
forse, dopo Giustiniano, del regolare svolgimento dei loro
programmi. Consiglia l’imperatore nei suoi provvedimenti
scolastici; [859] sorveglia il pagamento degli stipendi; [860] cura che i
maestri siano informati delle onorificenze [861] e delle immunità
concesse, o ridotte, o negate; esegue e garantisce l’applicazione
delle leggi relative, sia per parte dello Stato che dei municipi; invigila
sulla condotta degli studenti, dentro e fuori la scuola, per il che mette
in opera l’attività del dipendente ufficio censuale. Infine, come
governatore di ciascuna delle due metropoli, che sono anche i centri
maggiori della pubblica istruzione, provvede talora di pubblici docenti
le città di provincia, che ne abbisognano [862], e, almeno fin dal IV.
secolo, raccoglie nelle proprie mani l’amministrazione generale delle
biblioteche di ciascuna delle due città [863].
Analogamente, i governatori provinciali o i prefetti del pretorio,
ciascuno nel proprio àmbito territoriale, sorvegliano l’apertura e la
chiusura delle scuole pubbliche e private ed i maestri che le
dirigono; [864] ne impongono di nuove, o ne regolano il mantenimento
insieme con la nomina, lo stipendio dei docenti [865] e, dopo
Giustiniano, forse anche l’insegnamento. Al pari del praefectus urbi,
informano i docenti delle immunità concesse, o ridotte, o negate, e
ne eseguono e garantiscono, l’applicazione, non solo per parte dello
Stato, ma anche per parte dei municipi; rimpatriano i docenti, che
aspirano a torto a determinate immunità, cercando così di sottrarsi ai
loro obblighi sociali [866]; curano che i municipi osservino gli altri
privilegi, dall’imperatore stabiliti pei maestri, sia di arti liberali che di
altre discipline, e infliggono ai violatori le penalità comminate; [867]
bandiscono e corrispondono borse di studio agli studiosi; sorvegliano
la disciplina, e la condotta extrascolastica, degli scolari, rilasciano
loro il permesso di recarsi altrove a studiare [868]. Nè questo è tutto.
Le notizie pervenuteci sulle scuole ateniesi, che sono le più
abbondanti, ci dànno qualche altro particolare prezioso. I governatori
provinciali nominano, o fanno nominare dai Consigli municipali, le
Commissioni di concorso, le presiedono, decidono sulle loro
proposte, sui reclami dei candidati, convocano i professori e gli
studenti a gare solenni, premiano i vincitori, propongono quesiti,
sentenziano nelle contese, sospendono, destituiscono, reintegrano,
richiamano al dovere i maestri, che disertano la cattedra, inducono le
città a determinate scelte, inviano all’imperatore rapporti sullo stato
delle scuole; sono in una parola, fin dal IV. secolo, i veri e propri
curatori dell’andamento delle scuole, almeno delle principali,
collocate entro la loro giurisdizione [869].
IX.
X.
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookfinal.com