12,275
edits
(sockets) |
m (→Pitfalls) |
||
(17 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== IPs == | == IPs == | ||
IP steht für Internet Protocol und bezeichnet eine Adresse in einem [[Netzwerk | IP steht für Internet Protocol und bezeichnet eine Adresse eines Teilnehmers in einem [[Netzstrukturen|Netzwerk]]. Aktuell sind noch IPv4-Adressen im Einsatz, aufgrund der rasant ansteigenden Zahlen vorhandener Computer stößt man auch mit Konzepten wie dynamisch vergebenen IP-Adressen langsam an die Grenzen der maximalen Anzahl zu vergebender Nummern. In Zukunft wird jeder Rechner eine IPv6-Adresse haben. | ||
<source lang="C"> | <source lang="C"> | ||
127.0.0. | 127.0.0.1:4444 // Eigener Rechner (IP 127.0.0.1), Port# 4444 | ||
192.168.1.11:5555 // IP im lokalen Netzwerk 192.168.1.11, Port# 5555 | 192.168.1.11:5555 // IP im lokalen Netzwerk 192.168.1.11, Port# 5555 | ||
0.0.0.0:45678 // Aktuelle Netzadresse, Port#45678. | 0.0.0.0:45678 // Aktuelle Netzadresse, Port#45678. | ||
// Bei UDP kann diese Adresse für einen Broadcast im lokalen Netzwerk genutzt werden. | // Bei UDP kann diese Adresse für einen Broadcast im lokalen Netzwerk genutzt werden. | ||
255.255.255. | 255.255.255.255:2222 // Broadcast (z.B. von DHCP oder BOOTP genutzt) auf Port#2222 | ||
2001:0db8:85a3:08d3:1319:8a2e:0370:7344 // Bsp. einer IPv6 Adresse in hexadezimal-Notierung (ohne Port) | 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 // Bsp. einer IPv6 Adresse in hexadezimal-Notierung (ohne Port) | ||
</source> | </source> | ||
Line 34: | Line 34: | ||
== TCP == | == TCP == | ||
TCP | TCP ist (v.a. im Unterschied zu UDP) ein '''verbindungsorientiertes Transportprotokoll'''. D.h. es wird zuerst eine Verbindung aufgebaut, bevor der eigentliche Datentransfer beginnt. Dies ist zwar sicher (damit ist nicht sicher im Sinne von verschlüsselt oder abhörsicher gemeint!), aber bringt auch einen gewissen Overhead mit. | ||
Weiterführende Links: | Weiterführende Links: | ||
Line 48: | Line 48: | ||
<source lang="C"> | <source lang="C"> | ||
127.0.0. | 127.0.0.1:4444 // Eigener Rechner (IP 127.0.0.1), Port# 4444 | ||
192.168.1.11:5555 // IP im lokalen Netzwerk 192.168.1.11, Port# 5555 | 192.168.1.11:5555 // IP im lokalen Netzwerk 192.168.1.11, Port# 5555 | ||
0.0.0.0:45678 // UDP-Broadcast im lokalen Netzwerk auf Port#45678 | 0.0.0.0:45678 // UDP-Broadcast im lokalen Netzwerk auf Port#45678 | ||
</source> | </source> | ||
Achtung: Eigene Ports sollten am besten im Bereich von | Achtung: Eigene Ports sollten am besten im Bereich von 49152-65535 vergeben werden; eine [[wikipedia:List of TCP and UDP port numbers|Übersicht vergebener TCP und UDP Port Nummern]] findet man auf Wikipedia. | ||
Weiterführende Links UDP | Weiterführende Links UDP | ||
* [ | * [[wikipedia:de:User Datagram|de:User Datagram]] | ||
* [http://www.abc.se/~m6695/udp.html Writing a simple UDP client/server in a Unix Environment] | * [http://www.abc.se/~m6695/udp.html Writing a simple UDP client/server in a Unix Environment] | ||
* [[OSC]] - Open Sound Control | * [[OSC]] - Open Sound Control | ||
== Sockets == | == APIs == | ||
=== Sockets === | |||
Protokolle wie TCP und UDP sind abstrakte Dienste, die die Struktur von Computer-Kommunikation definieren. Programmierer benutzen für TCP und UDP Operationen ''[http://de.wikipedia.org/wiki/Socket_(Software) Sockets]'', manchmal auch BSD-Sockets genannt. Sockets sind in jedem Betriebssystem zu finden. | Protokolle wie TCP und UDP sind abstrakte Dienste, die die Struktur von Computer-Kommunikation definieren. Programmierer benutzen für TCP und UDP Operationen ''[http://de.wikipedia.org/wiki/Socket_(Software) Sockets]'', manchmal auch BSD-Sockets genannt. Sockets sind in jedem Betriebssystem zu finden. | ||
=== Socket | <br/> | ||
==== JAVA Socket ==== | |||
<source lang="java"> | <source lang="java"> | ||
ServerSocket serverSocket = new ServerSocket(port); // Serversocket mit bestimmter Port-Nummer erstellen | ServerSocket serverSocket = new ServerSocket(port); // Serversocket mit bestimmter Port-Nummer erstellen | ||
Line 78: | Line 79: | ||
</source> | </source> | ||
<br/> | |||
==== PHP Socket ==== | |||
Beispiel eines [http://de.wikipedia.org/wiki/ROT13 ROT13] Servers in PHP (basiert auf [http://www.java2s.com/Code/Php/Network/CreatesaROT13serverwhenpeopleconnecttoitandsendtextitrespondswiththeROT13equivalentoftheirtext.htm java2s.com Beispielcode]): | |||
<source lang="PHP"> | |||
<? | |||
$socket = socket_create_listen("55555"); | |||
if (!$socket) { | |||
print "Failed to create socket!\n"; | |||
exit; | |||
} | |||
while (true) { | |||
$client = socket_accept($socket); | |||
$welcome = "\nHello\n"; | |||
socket_write($client, $welcome); | |||
while (true) { | |||
if ($input == '!close') { break; } | |||
if ($input == '!halt') { | |||
socket_close ($client); | |||
break; | |||
} | |||
$output = str_rot13($input) . "\n"; | |||
socket_write($client, $output); | |||
print "In: $input, Out: $output\n"; | |||
} | |||
socket_close ($client); | |||
} | |||
socket_close ($socket); | |||
?> | |||
</source> | |||
weiterführende Links: | weiterführende Links: | ||
* [http://de.wikipedia.org/wiki/Socket_(Software) BSD Sockets] | * [http://de.wikipedia.org/wiki/Socket_(Software) BSD Sockets] | ||
* weitere Beispiele (z.B. für Processing) sind unter [[OSC]] zu finden! | |||
<br/> | |||
<br/> | |||
=== Datagram === | |||
==== Datagram Socket (JAVA Client/Server) ==== | |||
<source lang="java"> | |||
// code von | |||
// http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendoutandreceiveDatagramPacket.htm | |||
import java.io.BufferedReader; | |||
import java.io.IOException; | |||
import java.io.InputStreamReader; | |||
import java.net.DatagramPacket; | |||
import java.net.DatagramSocket; | |||
import java.net.InetAddress; | |||
public class ChatClient { | |||
public static void main(String[] args) throws Exception { | |||
DatagramSocket s = new DatagramSocket(); | |||
byte[] buf = new byte[1000]; | |||
DatagramPacket dp = new DatagramPacket(buf, buf.length); | |||
InetAddress hostAddress = InetAddress.getByName("localhost"); | |||
while (true) { | |||
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); | |||
String outMessage = stdin.readLine(); | |||
if (outMessage.equals("bye")) | |||
break; | |||
String outString = "Client say: " + outMessage; | |||
buf = outString.getBytes(); | |||
DatagramPacket out = new DatagramPacket(buf, buf.length, hostAddress, 9999); | |||
s.send(out); | |||
s.receive(dp); | |||
String rcvd = "rcvd from " + dp.getAddress() + ", " + dp.getPort() + ": " | |||
+ new String(dp.getData(), 0, dp.getLength()); | |||
System.out.println(rcvd); | |||
} | |||
} | |||
} | |||
import java.io.BufferedReader; | |||
import java.io.InputStreamReader; | |||
import java.net.DatagramPacket; | |||
import java.net.DatagramSocket; | |||
public class ChatServer { | |||
public static void main(String[] args) throws Exception { | |||
int PORT = 4000; | |||
byte[] buf = new byte[1000]; | |||
DatagramPacket dgp = new DatagramPacket(buf, buf.length); | |||
DatagramSocket sk; | |||
sk = new DatagramSocket(PORT); | |||
System.out.println("Server started"); | |||
while (true) { | |||
sk.receive(dgp); | |||
String rcvd = new String(dgp.getData(), 0, dgp.getLength()) + ", from address: " | |||
+ dgp.getAddress() + ", port: " + dgp.getPort(); | |||
System.out.println(rcvd); | |||
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); | |||
String outMessage = stdin.readLine(); | |||
buf = ("Server say: " + outMessage).getBytes(); | |||
DatagramPacket out = new DatagramPacket(buf, buf.length, dgp.getAddress(), dgp.getPort()); | |||
sk.send(out); | |||
} | |||
} | |||
} | |||
</source> | |||
also see: | |||
* [http://java.sun.com/docs/books/tutorial/networking/datagrams/clientServer.html java.sun.com datagram example] | |||
<br/> | |||
<br/> | |||
== *nix Tools == | |||
Lustige Tools im Terminal bzw. Konsole: | |||
* <tt>arp <hostname.domain></tt> | |||
* <tt>ping -c 3 <ip></tt> | |||
* <tt>host <domain> bzw: host -a <domain></tt> | |||
* <tt>whois <domain></tt> | |||
* <tt>traceroute <domain></tt> | |||
* <tt>netstat -an</tt> | |||
* <tt>ifconfig</tt> | |||
== Pitfalls == | |||
* Firewalls können Anwendungen oder Ports blockieren | |||
* Firewalls findet man in Computern sowie in Routern | |||
* Ports können bereits geöffnet und damit belegt sein | |||
* IP-Adressen können sich ändern; deshalb wenn möglich Hostnamen oder Services wie [[wikipedia:Bonjour (software)|Bonjour]] bzw. [[wikipedia:ZeroConf|ZeroConf]] nutzen | |||
== Links == | == Links == | ||
siehe "weiterführende Links" unter den einzelnen Sektionen und: | siehe "weiterführende Links" unter den einzelnen Sektionen und: | ||
* [http://www.uni-weimar.de/cms/medien/webis/teaching/lecture-notes.html#web-technology Web-Technologie Vorlesung] bei Prof. Benno Stein | |||
* [http://www.uni-weimar.de/medien/webis/teaching/lecturenotes/web-technology/unit-de-network-protocol1.pdf Lecture Notes Network Protocols 1] von Prof. Benno Stein | * [http://www.uni-weimar.de/medien/webis/teaching/lecturenotes/web-technology/unit-de-network-protocol1.pdf Lecture Notes Network Protocols 1] von Prof. Benno Stein | ||
* [http://www.uni-weimar.de/medien/webis/teaching/lecturenotes/web-technology/unit-de-network-protocol1.pdf Lecture Notes Network Protocols 2] von Prof. Benno Stein | * [http://www.uni-weimar.de/medien/webis/teaching/lecturenotes/web-technology/unit-de-network-protocol1.pdf Lecture Notes Network Protocols 2] von Prof. Benno Stein | ||
* Was waren noch mal [[wikipedia:de:Bit|Bits]] und [[wikipedia:de:Byte|Bytes]]? | |||
{{Template:Netzkurs}} | |||
[[Category: | [[Category:JAVA]] | ||