programmera.net -> java -> normal     för utskrift      info@programmera.net

TCP-socket

1. Vad är en TCP-socket?
2. Sockets på serversidan
3. Sockets på klientsidan
4. Socket exceptions

1. Vad är en TCP-socket?

TCP-socket är en strömbaserad, anslutningsorienterad (connection-oriented) socket. En TCP-socket har två byteströmmar (input och output) som används för kommunikation med processen på andra sidan anslutningen genom operationerna read och write. Man kallar detta för full duplex eftersom en TCP-socket kan läsa och skriva SAMTIDIGT utan att det blir någon krock. Det finns två basklasser för TCP-sockets:

  • java.net.Socket: Används för att ansluta till övriga TCP-sockets. Vi har en "java.net.Socket"-instans på både klientsidan och serversidan som håller uppe anslutningen.
  • java.net.ServerSocket: Lyssnar efter anslutningsförfrågningar och skapar sockets för kommunikation. ServerSocket lyssnar på inkommande anrop med metoden accept() som väntar tills en klient försöker kontakta servern. När någon klient försöker kontakta servern skapar accept() en vanlig Socket, som är unik för klienten.

2. Sockets på serversidan

På servern skapas alltså både en "ServerSocket" och en "Socket" på detta sätt:
ServerSocket listen=new ServerSocket(10111);
while(true){
  Socket socket=listen.accept();
  // do work...
}

3. Sockets på klientsidan

En klient kan skapa en socket på följande sätt:
Socket socket=new Socket("localhost",10111);
I detta fall ligger servern på samma dator som klienten, då skriver man localhost istället för serverns IP-nummer.

4. Socket exceptions

En TCP-socket kastar java.net.SocketException för att markera att det har blivit något fel med TCP-överföringen. Följande subklasser finns som ytterligare specifierar vilken typ av fel som inträffat:

  • java.net.BindException: Inträffar då man misslyckas med att binda socketen till en port på den lokala adressen.
  • java.net.ConnectionException: Misslyckad anslutning till den avlägsna adressen.
  • java.net.NoRouteToHostException: Signalerar att en brandvägg (eller liknande) står ivägen för kontakt med den avlägsna adressen.
  • java.net.PortUnreachableException: Ett "ICMP Port Unreachable"-meddelande har mottagits.
Klienten kan även få följande fel (ej subklasser av SocketException) :
  • java.net.UnknownHostException: Visar att host-IP-adressen inte kan bestämmas.
  • java.io.IOException: Misslyckad dataöverföring.
Servern kan även få följande fel:
  • java.io.IOException: Misslyckad dataöverföring.