Übersicht DI. Dr. Peter René Dietmüller

Werbung
Verarbeitungsschicht
Übersicht
DI. Dr. Peter René Dietmüller
Institut für Informationsverarbeitung und Mikroprzessortechnik
Johannes Kepler Universität Linz
Inhalt
Verarbeitungsschicht
application layer
Transportschicht
transport layer
Vermittlungsschicht
network layer
Sicherungsschicht
data link layer
Bitübertragungsschicht
physical layer
© Peter René Dietmüller
Verarbeitungsschicht
Seite 2
Inhalt (2)
Ø Sockets
Ø DNS
Ø SNMP
Ø SMTP, POP3, IMAP, MIME
Ø NNTP
Ø HTTP
Ø FTP
Ø Telnet
Ø IRC
Ø ICQ
© Peter René Dietmüller
Ø LPR
Ø X-Windows
Ø RMI
Ø CORBA
Verarbeitungsschicht
Seite 3
Windows Sockets
An Open Interface for Network
Programming under Microsoft Windows
DI. Dr. Peter René Dietmüller
Institut für Informationsverarbeitung und Mikroprozessortechnik
Johannes Kepler Universität Linz
Überblick
Ø Geschichte
Ø Was ist Winsock?
Ø Kommunikation
Ø Winsock-Funktionen
Ø Beispiel
Ø Modi
© Peter René Dietmüller
Windows Sockets
Seite 5
Geschichte
Ø Berkeley Sockets API
Ø Winsock Version 1.0 (Juni 1992)
Ø Winsock Version 1.1 (20.01.1993)
Ø Winsock Version 2.0 (Revision 2.0.8 vom 20.05.1995)
© Peter René Dietmüller
Windows Sockets
Seite 6
Was ist Winsock?
Ø Bibliothek von Funktionen zur Kommunikation (als DLL impl.)
Ø einheitliches API für Netzwerk-Anwendungen
Ø Schnittstelle zwischen Anwendungen und Protokolle
♦ Die Anwendung ist für die Benutzerschnittstelle zuständig.
♦ Das Protokoll übernimmt das Senden/Empfangen von Daten.
♦ Winsock steht als Vermittler dazwischen.
Ø offene, frei verfügbare Schnittstelle ohne Lizenzgebühren
Ø Quellcode-kompatibel mit BSD-Sockets-Programmen
Ø Verfügbar: 16/32-Bit Windows, OS/2
Ø unterstützt verschiedene Protokolle
© Peter René Dietmüller
Windows Sockets
Seite 7
Was ist Winsock? (2)
Anwendung 1
Anwendung 2
© Peter René Dietmüller
...
...
IPX
TCP/IP
Winsock
Windows Sockets
Seite 8
Was ist Winsock? (3)
OSI Model
7
Application
6
Presentation
5
Session
4
Transport
3
Network
Protocol Stack
(TCP/IP)
2
Data Link
Network Driver
1
Physical
Network Interface
© Peter René Dietmüller
Windows Sockets
Application
Windows Sockets
Windows
Sockets
API
Seite 9
Winsock 2 - Architektur
Quelle: MSDN Oktober 2000
© Peter René Dietmüller
Windows Sockets
Seite 10
Sockets
Ø engl. Bezeichnung für Steckdose, Anschluß
Ø Sockets sind Endpunkte einer Kommunikation.
Ø Ein Programm kann ein oder mehrere solcher Anschlüsse öffnen.
Ø Mit einem Socket kann eine Verbindung zu einem anderen Socket
aufgebaut werden oder auf eine Verbindung von einem anderen
Socket gewartet werden.
Ø Die Adressierung eines Socket ist vom Protokoll abhängig.
Ø Im TCP/IP-Protokoll wird ein Socket durch die IP-Adresse des
Rechners und durch eine Portnummer bestimmt.
© Peter René Dietmüller
Windows Sockets
Seite 11
Sockets (2)
Damit eine Kommunikation über einen Socket laufen kann, müssen
folgende Informationen bereitgestellt werden:
Ø das Protokoll
Ø die lokale Adresse (für TCP: IP-Adresse, Portnummer) und
Ø die entfernte Adresse (für TCP: IP-Adresse, Portnummer).
1) Protocol
2) Local IP
3) Local Port
© Peter René Dietmüller
4) Remote IP
5) Remote Port
Windows Sockets
Seite 12
Ports
Da auf einem Rechner viele verschiedene Programme laufen können,
die über das Netzwerk kommunizieren, wird mit der Portnummer
festgelegt, mit welchem Programm man kommunizieren möchte.
Eine Server-Anwendung wartet auf einem festgelegten Port auf eine
Verbindung. Damit der Client mit dem Server kommunizieren kann,
muß er genau auf diesem Port eine Verbindung zum Server aufbauen.
Einige Portnummer sind fix vergeben. Sie sind meist in einer Datei
namens „services“ verzeichnet.
© Peter René Dietmüller
Windows Sockets
Seite 13
Standardisierte Ports
Keyword
echo
echo
ftp-data
ftp-data
ftp
ftp
telnet
telnet
…
Decimal
7/tcp
7/udp
20/tcp
20/udp
21/tcp
21/udp
23/tcp
23/udp
© Peter René Dietmüller
Description
Echo
Echo
File Transfer [Default Data]
File Transfer [Default Data]
File Transfer [Control]
File Transfer [Control]
Telnet
Telnet
Windows Sockets
Seite 14
Byte Ordering
Intel-Prozessoren speichern Multibyte-Werte in einer anderen
Reihenfolge ab. Intel verwendet für seine Prozessoren little endian,
während viele andere Herstelle big endian verwenden.
Über das Netzwerk wird in der Regel in „big endian“ versendet. Die
meisten Winsock-Funktionen erwarten daher, daß Multibyte-Werte in
big endian übergeben werden.
byte order
big endian
© Peter René Dietmüller
0
1
1
1 2 3 4
0
4 3 2 1
Windows Sockets
little endian
Seite 15
Kommunikation
Ø Streams über TCP
♦ STD07: J. Postel. Transmission Control Protocol. September
1981. (RFC0793)
♦ STD03: R. Braden. Host Requirements. October 1989.
(RFC1122, RFC1123)
Ø Datagramme über UDP
♦ STD06: J. Postel. User Datagram Protocol. August 1980.
(RFC0768)
♦ STD03: R. Braden. Host Requirements. October 1989.
(RFC1122, RFC1123)
© Peter René Dietmüller
Windows Sockets
Seite 16
TCP-Kommunikation
Die Kommunikation mit Hilfe des Protokolls TCP kann mit
Dateioperationen verglichen werden.
File I/O
Datei öffnen
Datei schreiben/lesen
Datei schließen
© Peter René Dietmüller
Winsock
Socket öffnen
Socket benennen
Socket verbinden
Daten senden/empfangen
Socket schließen
Windows Sockets
Seite 17
TCP-Kommunikation (2)
Die einzelnen Schritte unterscheiden sich, ob die Anwendung eine
Server- oder Client-Anwendung ist.
Winsock
Socket öffnen
Socket benennen
Socket verbinden
Daten senden/empfangen
Socket schließen
© Peter René Dietmüller
Client
socket()
-- / bind()
connect()
send() / recv()
closesocket()
Windows Sockets
Server
socket()
bind()
listen(), accept()
send() / recv()
closesocket()
Seite 18
UDP-Kommunikation
Winsock
Socket öffnen
Socket benennen
Socket verbinden
Daten senden
Daten empfangen
Socket schließen
© Peter René Dietmüller
Client
socket()
--- / connect()
sendto() / send()
recvfrom() / recv()
closesocket()
Windows Sockets
Server
socket()
-- / bind()
-sendto() / send()
recvfrom() / recv()
closesocket()
Seite 19
socket()
Diese Funktion öffnet einen Socket für ein bestimmtes Protokoll.
Wenn die Funktion erfolgreich ist, gibt sie einen Socket Handle
zurück, sonst den Wert INVALID_SOCKET.
SOCKET PASCAL FAR socket(
int af
/* address family */
int type
/* socket type
*/
int protocol); /* protocol name */
Beispiel:
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)
öffnet einen Socket für das Protokoll TCP
© Peter René Dietmüller
Windows Sockets
Seite 20
socket() (2)
Mit socket() wird ein Socket eröffnet und das Protokoll für diesen
Socket spezifiziert.
1) Protocol
2) Local IP
3) Local Port
© Peter René Dietmüller
4) Remote IP
5) Remote Port
Windows Sockets
Seite 21
sockaddr structure
Um ein Socket zu adressieren, wird folgende Struktur verwendet.
struct sockaddr {
u_short sa_family;
/* address family */
char
sa_data[14]; /* undefined
*/
}
Für jedes Protokoll gibt es eine spezialisierte Version dieser Struktur,
da die Adressierung der Protokolle nicht gleich ist. Für die Internetprotokolle gibt es die Struktur sockaddr_in.
© Peter René Dietmüller
Windows Sockets
Seite 22
sockaddr_in structure
struct sockaddr_in {
short
sin_family;
u_short
sin_port;
struct in_addr sin_addr;
char
sin_zero[8];
}
sin_family:
sin_port:
sin_addr:
address family
16-Bit port number in network order
32-Bit IP-address in network order
© Peter René Dietmüller
Windows Sockets
Seite 23
bind()
Mit bind() wird einem Socket die lokale Adresse des Socket
mitgeteilt.
int PASCAL FAR bind(
SOCKET s,
/* socket handle */
struct sockaddr FAR *addr, /* local addr. */
int namelen);
/* structure length */
Um die lokale IP-Adresse nicht ermitteln zu müssen, kann statt der
IP-Adresse die Konstante INADDR_ANY verwendet werden.
Eine Server-Anwendung muß diese Funktion aufrufen, um den Port
zu setzen, auf dem sie auf einlangende Verbindungen wartet. Für eine
Client-Anwendung ist es nicht notwendig, diese Funktion aufzurufen.
© Peter René Dietmüller
Windows Sockets
Seite 24
bind() (2)
Mit bind() wird die lokale Adresse des Socket spezifiziert.
1) Protocol
2) Local IP
3) Local Port
© Peter René Dietmüller
4) Remote IP
5) Remote Port
Windows Sockets
Seite 25
listen()
Mit listen() wird auf einem bestimmten Socket (und damit auf einem
bestimmten Port) auf ankommende Verbindungen gewartet.
int PASCAL FAR listen(
SOCKET s,
int backlog);
backlog: Länge der wartenden Verbindungsanforderungen
© Peter René Dietmüller
Windows Sockets
Seite 26
connect()
Diese Funktion baut eine Verbindung zu einem anderen Socket auf.
int PASCAL FAR connect(
SOCKET s,
/* socket handle */
struct sockaddr FAR *addr, /* rem. addr. */
int namelen);
/* structure length */
© Peter René Dietmüller
Windows Sockets
Seite 27
connect() (2)
Wenn bind() für diesen Socket nicht aufgerufen wurde, wird die
lokale IP-Adresse und eine freie lokale Portnummer in den Socket
eingetragen.
1) Protocol
2) Local IP
3) Local Port
© Peter René Dietmüller
4) Remote IP
5) Remote Port
Windows Sockets
Seite 28
accept()
accept() wird nach der Funktion listen() aufgerufen und erzeugt einen
neuen Socket für eine wartende Verbindung.
SOCKET PASCAL FAR accept(
SOCKET s,
/* a listening socket */
struct sockaddr FAR *addr, /* incoming s. */
int FAR *addrlen); /* length of sockaddr */
Der Socket, der auf eingehende Verbindung wartet, („listening
socket“) bleibt von dieser Funktion unberührt und horcht weiterhin
auf ankommende Verbindungen.
© Peter René Dietmüller
Windows Sockets
Seite 29
accept() (2)
accept() liefert einen neuen Socket, dessen lokale Adresse und
Einstellungen mit dem „listening socket“ ident sind. Die entfernte
Adresse wird aus dem Paket gewonnen, mit dem die Verbindung
vom entfernten Rechner aufgebaut wird.
1) Protocol
2) Local IP
3) Local Port
© Peter René Dietmüller
4) Remote IP
5) Remote Port
Windows Sockets
Seite 30
send()
send() sendet Daten über einen Socket. Aus der Funktion wird erst
zurückgekehrt, wenn die Daten gesendet wurden.
int FAR PASCAL send(
SOCKET s,
const char FAR *buf, /* Daten
*/
int len,
/* Länge der Daten */
int flags);
© Peter René Dietmüller
Windows Sockets
Seite 31
sendto()
sendto() sendet Daten über einen „nicht verbundenen“ Socket. Aus
der Funktion wird erst zurückgekehrt, wenn die Daten gesendet
wurden.
int FAR PASCAL sendto(
SOCKET s,
const char FAR *buf,
/* Daten
*/
int len,
/* Länge der Daten*/
int flags,
/* Sendeoptionen */
struct sockaddr FAR *to,/* Zieladresse
*/
int tolen);
/* Länge der Ziel.*/
© Peter René Dietmüller
Windows Sockets
Seite 32
recv()
Empfängt ein Socket Daten, werden die Daten von der WinsockBibliothek in einer Queue zwischengespeichert. Mit recv() können
die Daten vom Programm abgeholt werden.
int PASCAL FAR recv(
SOCKET s,
char FAR *buf, /* Puffer für empf. Daten */
int len,
/* Länge des Puffers
*/
int flags);
© Peter René Dietmüller
Windows Sockets
Seite 33
recvfrom()
Mit recvfrom() können Daten von einem „nicht verbundenen“ Socket
gelesen werden. In die beiden letzten Parameter wird die Adresse des
Absenders gespeichert.
int PASCAL FAR recvfrom(
SOCKET s,
char FAR *buf,
/* empf. Daten */
int len,
/* Länge der D.*/
int flags,
/* Optionen
*/
struct sockaddr FAR *from, /* Senderadr. */
int FAR *fromlen);
/* Länge Sa.
*/
© Peter René Dietmüller
Windows Sockets
Seite 34
closesocket()
closesocket() baut eine Verbindung zu einem anderen Socket ab und
schließt den Socket.
int PASCAL FAR closesocket(SOCKET s);
© Peter René Dietmüller
Windows Sockets
Seite 35
shutdown()
Bevor man mit closesocket() eine Verbindung abbaut, sollte man mit
shutdown() die Verbindung „teilweise“ abbauen. Der beteiligte
Socket wird durch diese Funktion nicht geschlossen.
int PASCAL FAR shutdown(
SOCKET s,
int how);
how: Art des Shutdown
1.....Es werden keine Pakete mehr empfangen.
2.....Es können keine Pakete mehr gesendet werden.
3.....Beides.
© Peter René Dietmüller
Windows Sockets
Seite 36
WSAStartup()
WSAStartup() muß vor jeder anderen Winsock-Funktion aufgerufen
werden, um die Winsock-Bibliothek zu initialisieren.
int PASCAL FAR WSAStartup(
WORD wVersionRequired,
LPWSADATA lpWSAData);
Über den Parameter wVersionRequired gibt eine Applikation an,
welche Version der Winsock-Bibliothek benötigt wird. Im High-Byte
wird die Minor- und im Low-Byte die Major-Versionsnummer
angegeben.
Im Parameter lpWSAData liefert die Winsock-Bibliothek Details über
die Implementierung der Bibliothek.
© Peter René Dietmüller
Windows Sockets
Seite 37
WSACleanup()
Muß als letzte Winsock-Funktion aufgerufen werden, damit die
Winsock-Bibliothek „aufräumen“ kann. Für jeden Aufruf der
Funktion WSAStartup() muß einen Aufruf von WSACleanup()
geben.
int PASCAL FAR WSACleanup(void);
© Peter René Dietmüller
Windows Sockets
Seite 38
select()
Mit der Funktion select() kann man den Status eines oder mehrerer
Sockets ermitteln. Damit ist es zum Beispiel möglich eine gewisse
Zeit auf das Eintreffen von Daten zu warten und wenn keine Daten
eintreffen einen Timeout auszulösen.
int PASCAL FAR select(
int nfds,
/* not used, compatibility */
fd_set FAR *readfds,
/* readable? */
fd_set FAR *writefds,
/* writable? */
fd_set FAR *exceptfds
/* exceptions? */
struct timeval FAR *timeout); /* timeout */
© Peter René Dietmüller
Windows Sockets
Seite 39
gethostbyname()
Diese Funktion liefert unter anderem die IP-Adresse eines Rechners.
struct hostent FAR * PASCAL FAR
gethostbyname(char FAR * name);
struc hostent {
char FAR * h_name; /* official host name
char FAR * FAR * h_aliases;
/* aliases
short h_addrtype;
/* address family
short h_length;
/* length of address
char FAR * FAR * h_addr_list; /*addresses
}
© Peter René Dietmüller
Windows Sockets
*/
*/
*/
*/
*/
Seite 40
Beispiel WWWGet
WWWGet ist ein einfaches Windowsprogramm, das eine HTMLSeite von einem WWW-Server holt.
Dazu wird eine Verbindung zu einem WWW-Server auf Port 80
aufgebaut und das Kommando „GET … “ verschickt. Der WWWServer sendet die im GET-Kommando angegebene HTML-Seite als
Antwort zurück und schließt die Verbindung. Die empfangenen
Daten werden ausgegeben.
© Peter René Dietmüller
Windows Sockets
Seite 41
WWWGet (2)
#include <stdio.h>
#include <string.h>
#include <winsock.h>
static int http_rcvGet(SOCKET s) {
char buffer[4096];
int i;
int len;
len = 1;
while ((len != 0) && (len != SOCKET_ERROR)) {
len = recv(s, buffer, sizeof(buffer), 0);
for(i = 0; i < len; i++) putchar(buffer[i]);
}
return (len == 0);
}
© Peter René Dietmüller
Windows Sockets
Seite 42
WWWGet (3)
static int http_sendGet(SOCKET s, const char *url) {
char cmd[200];
strcpy(cmd, "GET ");
strcat(cmd, url);
strcat(cmd, " HTTP/1.0");
strcat(cmd, "\n\n");
send(s, cmd, strlen(cmd), 0);
return 1;
}
© Peter René Dietmüller
Windows Sockets
Seite 43
WWWGet (4)
static void http_get(const char *server, const char *url) {
int
struct hostent
SOCKET
struct sockaddr_in
WORD
WSADATA
err;
*he;
s;
sin;
vr;
wsaData;
/* -- Winsock initialisieren -- */
vr = MAKEWORD(2, 2);
err = WSAStartup(vr, &wsaData);
if (err != 0) {
printf("Fehler beim Initialisieren der Winsock-Bibliothek.\n");
return;
}
© Peter René Dietmüller
Windows Sockets
Seite 44
WWWGet (5)
/* -- Namen auflösen -- */
he = gethostbyname(server);
if (!he) {
printf("Der Server %s konnte nicht gefunden werden.\n", server);
WSACleanup();
return;
}
/* -- Socket anlegen -- */
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET) {
printf("Ein Socket konnte nicht angelegt werden.\n");
WSACleanup();
return;
}
© Peter René Dietmüller
Windows Sockets
Seite 45
WWWGet (6)
/* -- Verbindung aufbauen -- */
memset(&sin, 0, sizeof(sin));
sin.sin_family = PF_INET;
sin.sin_port
= htons(80);
memcpy(&sin.sin_addr, he->h_addr_list[0], sizeof(sin.sin_addr));
err = connect(s, (LPSOCKADDR)&sin, sizeof(sin));
if (err != SOCKET_ERROR) {
http_sendGet(s, url); /* Befehl an WWW-Server senden */
if (!http_rcvGet(s)) { /* Seite empfangen und ausgeben */
printf("Fehler beim Empfangen der URL %s.\n", url);
}
closesocket(s);
/* Verbindung schließen */
} else {
printf("Keine Verbindung: Server %s, Port %d.\n", server, 80);
}
WSACleanup();
}
© Peter René Dietmüller
Windows Sockets
Seite 46
WWWGet (7)
int main(int argc, char *argv[]) {
printf("WWWGet V1.1\n\n");
/* -- Parameter -- */
if (argc != 3) {
printf("Sie haben zu wenig Parameter angegeben.\n");
Usage();
} else {
http_get(argv[1], argv[2]);
}
return 0;
}
© Peter René Dietmüller
Windows Sockets
Seite 47
Modi
Ø Blocking mode
Die Winsock-Funktionen blockieren das Programm. In recv() wird
zum Beispiel so lange gewartet, bis Daten empfangen wurden.
Ø Nonblocking mode (polling)
Die Winsock-Funktionen blockieren das Programm nicht. Aus
recv() wird zum Beispiel sofort zurückgekehrt, egal ob Daten
empfangen wurden oder nicht.
Ø Asynchronous mode
Die Winsock-Funktionen versenden Nachrichten beim Eintreffen
bestimmter Ereignisse.
© Peter René Dietmüller
Windows Sockets
Seite 48
Modi (2)
blocking
non blocking
asynchronous
initiated .. processing .. completed
initiated .. processing .. completed
initiated .. processing .. completed
© Peter René Dietmüller
Windows Sockets
Seite 49
Quellen
Ø Bob Quinn, Dave Shute, „Windows Sockets Network
Programming“, Addison Wesley, 1996
Ø Bob Quinn, „Winsock Development Information“,
http://www.sockets.com
Ø J. Reynolds, J. Postel, „RFC1700 - ASSIGNED NUMBERS“,
1994
Ø MSDN Oktober 2000, Microsoft Corporation
© Peter René Dietmüller
Windows Sockets
Seite 50
Java Sockets
Network Programming with Java
DI. Dr. Peter René Dietmüller
Institut für Informationsverarbeitung und Mikroprzessortechnik
Johannes Kepler Universität Linz
© Peter René Dietmüller
Java Sockets
Seite 51
Überblick
Ø TCP-Kommunikation
Ø UDP-Kommunikation
Ø Klasse Socket
Ø Klasse ServerSocket
Ø Klasse DatagramPacket
Ø Klasse DatagramSocket
© Peter René Dietmüller
Java Sockets
Seite 52
TCP-Kommunikation
Klasse
Socket öffnen
Socket benennen
Socket verbinden
Daten senden,
empfangen
Socket schließen
© Peter René Dietmüller
Client
Socket
Konstruktor
--getInputStream() /
getOutputStream()
close()
Java Sockets
Server
ServerSocket
Konstruktor
-accept()
getInputStream() /
getOutputStream()
close()
Seite 53
UDP-Kommunikation
Client
Klasse
DatagramSocket,
DatagramPacket
Socket öffnen
Konstruktor
Socket benennen
-Socket verbinden
-Daten senden, empf. send() / receive()
Socket schließen
close()
© Peter René Dietmüller
Java Sockets
Server
DatagramSocket,
DatagramPacket
Konstruktor
--send() / receive()
close()
Seite 54
Socket (1)
public Socket(InetAddress address, int port)
throws IOException
Parameter:
♦ address - the IP address.
♦ port - the port number.
Throws:
♦ IOException - if an I/O error occurs when creating the socket.
♦ SecurityException - if a security manager exists and its checkConnect method doesn't allow the operation.
© Peter René Dietmüller
Java Sockets
Seite 55
Socket (2)
public Socket(String host, int port)
throws UnknownHostException,
IOException
Parameters:
♦ host - the host name.
♦ port - the port number.
Throws:
♦ IOException - if an I/O error occurs when creating the socket.
♦ SecurityException - if a security manager exists and its
checkConnect method doesn't allow the operation.
Example: Socket s = new Socket(„www.fim.uni-linz.ac.at“, 80)
© Peter René Dietmüller
Java Sockets
Seite 56
Socket (3)
public Socket(String host, int port,
InetAddress lAddr, int lPort)
throws IOException
Parameters:
♦ host - the name of the remote host
♦ port - the remote port
♦ lAddr - the local address the socket is bound to
♦ lPort - the local port the socket is bound to
Throws:
♦ SecurityException - if a security manager exists and its
checkConnect method doesn't allow the operation.
© Peter René Dietmüller
Java Sockets
Seite 57
Method getInputStream
public InputStream getInputStream()
throws IOException
Returns:
♦ an input stream for reading bytes from this socket.
Throws:
♦ IOException - if an I/O error occurs when creating the input
stream.
Example:
BufferedReader sin = new BufferedReader(
new InputStreamReader(s.getInputStream()));
zeile = sin.readLine();
© Peter René Dietmüller
Java Sockets
Seite 58
Method getOutputStream
public OutputStream getOutputStream()
throws IOException
Returns:
♦ an output stream for writing bytes to this socket.
Throws:
♦ IOException - if an I/O error occurs when creating the output
stream.
Example:
PrintWriter sout = new
PrintWriter(s.getOutputStream(), true);
sout.println(zeile);
© Peter René Dietmüller
Java Sockets
Seite 59
Method close
public void close()
throws IOException
Throws:
♦ IOException - if an I/O error occurs when closing this socket.
© Peter René Dietmüller
Java Sockets
Seite 60
ServerSocket (1)
public ServerSocket(int port)
throws IOException
Parameters:
♦ port - the port number, or 0 to use any free port.
Throws:
♦ IOException - if an I/O error occurs when opening the socket.
♦ SecurityException - if a security manager exists and its
checkListen method doesn't allow the operation.
Example:
ServerSocket s = new ServerSocket(80);
© Peter René Dietmüller
Java Sockets
Seite 61
ServerSocket (2)
public ServerSocket(int port,
int backlog)
throws IOException
Parameters:
♦ port - the specified port, or 0 to use any free port.
♦ backlog - the maximum length of the queue.
Throws:
♦ IOException - if an I/O error occurs when opening the socket.
♦ SecurityException - if a security manager exists and its
checkListen method doesn't allow the operation.
© Peter René Dietmüller
Java Sockets
Seite 62
Method accept
public Socket accept()
throws IOException
Throws:
♦ IOException - if an I/O error occurs when waiting for a
connection.
♦ SecurityException - if a security manager exists and its
checkListen method doesn't allow the operation.
Example:
ServerSocket ss = new ServerSocket(80);
Socket s = ss.accept(); /* blocks until a
connection is made */
© Peter René Dietmüller
Java Sockets
Seite 63
DatagramPacket (1)
public DatagramPacket(byte[] buf,
int length)
Parameters:
♦ buf - buffer for holding the incoming datagram.
♦ length - the number of bytes to read.
Example:
/* -- Packet for receiving data -- */
p = new DatagramPacket(d, d.length);
© Peter René Dietmüller
Java Sockets
Seite 64
DatagramPacket (2)
public DatagramPacket(byte[] buf,
int length,
InetAddress address,
int port)
Parameters:
♦ buf - the packet data.
♦ length - the packet length.
♦ addr - the destination address.
♦ port - the destination port number.
Example:
p = new DatagramPacket(d, d.length, adr, port);
© Peter René Dietmüller
Java Sockets
Seite 65
DatagramSocket (1)
public DatagramSocket()
throws SocketException
Throws:
♦ SocketException - if the socket could not be opened, or the
socket could not bind to the specified local port.
♦ SecurityException - if a security manager exists and its
checkListen method doesn't allow the operation.
Example:
s = new DatagramSocket();
© Peter René Dietmüller
Java Sockets
Seite 66
DatagramSocket (2)
public DatagramSocket(int port)
throws SocketException
Parameters:
♦ port - port to use.
Throws:
♦ SocketException - if the socket could not be opened, or the
socket could not bind to the specified local port.
♦ SecurityException - if a security manager exists and its
checkListen method doesn't allow the operation.
Example:
s = new DatagramSocket(1920);
© Peter René Dietmüller
Java Sockets
Seite 67
Method send
public void send(DatagramPacket p)
throws IOException
Parameters:
♦ p - the DatagramPacket to be sent.
Throws:
♦ IOException - if an I/O error occurs.
♦ SecurityException - if a security manager exists and its
checkMulticast or checkConnect method doesn't allow the
send.
Example: (assuming that d is a byte array)
s.send(new DatagramPacket(d, d.length, adr, port));
© Peter René Dietmüller
Java Sockets
Seite 68
Method receive
public void receive(DatagramPacket p)
throws IOException
Parameters:
♦ p - the DatagramPacket into which to place the incoming data.
Throws:
♦ IOException - if an I/O error occurs.
Example: (assuming that d is a byte array)
s = new DatagramSocket(PORT);
p = new DatagramPacket(d, d.length);
s.receive(p); s.close();
© Peter René Dietmüller
Java Sockets
Seite 69
Herunterladen