Java Nätverks API
URL
sockets
Nätverkskomponenter
i Java
•
•
•
•
URL
Stream sockets (TCP)
Datagram sockets (UDP)
Remote Method Invocation (RMI)
URL klassen
• Representerar en web resurs
– URL url1 =new URL(”http://www.du.se/~jbr”);
– URL url2 =new URL(url1,”index.html”);
• metoder
–
–
–
–
getProtocol()
getPort()
openConnection()
getContent()
URLConnection klassen
• Öppna en url koppling
URLConnection con =
url1.openConnection();
• Hämta innehållet på en websida
BufferedReader Stream = new
BufferedReader(
new InputStreamReader(
con.getInputStream()));
Socket klassen
• Java.net.Socket används för att göra
en TCP socket för en
klientapplikation.
• getInputStream() och
getOutputStream() används för att
skapa InputStream/OutputStream
objekt kopplade till Socket.
Socket klassen
Socket
host
host:port
port
TCP
IP
IP
TCP
HTTP
ServerSocket klassen
• Används för att skapa en socket
koppling på server sidan
– Tillsammans med Socket kan man skriva
distribuerade Client/Server
applikationer i Java utan att behöva
bekymra sig om detaljer som accept på
lägre nivåer
Exempel: Dagens datum
import java.net.*;
import java.io.*;
import java.util.Date;
public class date {
public static void main(String[] args) {
try {
for (int i = 0; i < args.length; i++) {
Socket s = new Socket(args[i], 13);
Exempel: Dagens datum
InputStream is = s.getInputStream();
InputStreamReader isr = new
InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String theTime = br.readLine();
System.out.println(theTime);
s.close();
}
}
catch (IOException e) {
System.out.println((new Date()).toString());
}
}
}
Uniform Datagram
Protocol
• TCP feltolerant, dvs sänder om
packet inte kom fram eller blev
korrupt
• UDP har ingen felkontroll
- Varför använda UDP?
- UDP upp till 3ggr snabbare än TCP
UDP klasser
• Java.net.DatagramSocket
– Fungerar både som klient och server
– UDP portar skilda från TCP portar
• java.net.DatagramPacket
– Hållare för de byte´s som skall skickas
resp sändas
– Innehåller IP adressen och portnummer
DatagramPacket
konstruktorer
public DatagramPacket(
byte[] data, int length)
public DatagramPacket(
byte[] data, int length,
InetAddress iaddr, int iport)
DatagramPacket
InetAddress ia = new InetAddess(”datan");
int chargen = 19;
String s = "My second UDP Packet”;
byte[] b = s.getBytes();
DatagramPacket dp =
new DatagramPacket(b, b.length, ia, chargen);
DatagramSocket
konstruktorer
public DatagramSocket() throws
SocketException
public DatagramSocket(int port) throws
SocketException
public DatagramSocket(int port,
InetAddress laddr) throws
SocketException
Skicka Datagram
class UDPSend {
public static void main(String[] args) {
try {
InetAddress ia = InetAddress.getByName(args[0]);
int chargen = 19;
String s = "My second UDP Packet";
byte[] b = s.getBytes();
DatagramPacket dp = new DatagramPacket(b, b.length, ia, chargen);
DatagramSocket sender = new DatagramSocket();
sender.send(dp);
} catch (UnknownHostException e) {}
catch (IOException e) {}
}
}
MulticastSocket
• Ärver DatagramSocket
• Två nya metoder joinGroup() och
leaveGroup().
• Endast multicastadresser 224.0.0.1 239.255.255.255
• Modifierad send som talar om hur
många hops man skall skicka sitt
multicast meddelande