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