Looking for sockets Keywords? Try Ask4Keywords

socketsErste Schritte mit Steckdosen


Bemerkungen

In diesem Abschnitt erhalten Sie einen Überblick darüber, was Sockets sind und warum ein Entwickler sie verwenden möchte.

Es sollte auch alle großen Themen in Sockets erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für Sockets neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.

Erstellen Sie einen nicht verbundenen Socket, stellen Sie eine Verbindung her und prüfen Sie, ob eine Verbindung hergestellt ist

 public class ConnectSocketExample {

    private int HTTP_PORT = 80;

    /**
     * example method to create unconnected socket
     * then connect to it
     * at end return connected socket
     *
     * @param httpHostName - endpoint host name fot socket connection
     * @throws IOException - if the socket is already connected or an error occurs while connecting.
     */
    protected Socket connectSocket(String httpHostName) throws IOException {
        // define local variable for socket and create unconnected socket
        Socket socket = new Socket();
        //  create iNet address for socket
        InetSocketAddress inetSocketAddress = new InetSocketAddress(httpHostName, HTTP_PORT);
        // connect socket to inet address (end point )
        socket.connect(inetSocketAddress);
        // return connected socket for later use 
        return socket;
    }
    
    /** 
     * public method for try to create connected to goole.com http port socket 
     * and with check and system out print if this try was successful
     **/
    public void createAndCheckIfConnected() {
        try {
            Socket connectedSocket = connectSocket("google.com");
            boolean connected = connectedSocket.isConnected();
            System.out.print("Socket is:" + (!connected ? " not" : "" +  " connected"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
 

So instanziieren Sie ein Socket-Klassenobjekt

Das Instantiieren einer Socket kann auf verschiedene Arten erfolgen.

  1. durch 2-Zeilen-Deklaration und Instantiierung:

    Zuerst müssen wir eine Variable definieren, die ein Socket-Klassenobjekt enthalten soll:

    Socket socket;
     

    dann können wir ein Socket-Klassenobjekt erstellen:

    socket = new Socket();
     
  2. Wir können auch eine einzeilige Definition und Instanziierung vornehmen:

    Socket  socket = new Socket();
     

Auf beiden Wegen wird ein nicht verbundener Socket erstellt.

Wir können andere parametrisierte Konstruktoren verwenden, um verbundene oder nicht verbundene Socket-Klassenobjekte zu instanziieren:

Einzelheiten finden Sie in den Klassendokumenten:

https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html

Schreiben Sie eine einfache http-Get-Anforderung in den Socket und geben Sie die Antwort ab

/** 
 * we reuse a class written in example:
 * http://stackoverflow.com/documentation/sockets/2876/introduction-to-sockets#t=201607262114505531351
 * pleas to familiar with it first to continue with this one 
 **/
public class WriteToSocketExample extends ConnectSocketExample {

    private String CRLF = "\r\n"; // line termination (separator)

    /**
     * write a simple http get request to socket
     * @param host - host to establish a connection
     *               (http server - see ConnectSocketExample HTTP_PORT )
     * @param path - path to file ( in this case a url location - part used in browser after host)
     * @return a  connected socket with filled in raw get request
     * @throws IOException - see ConnectSocketExample.connectSocket(host);
     */
    protected Socket writeGetToSocket(String host, String path) throws IOException {
        // create simple http raw get request for host/path
        String rawHttpGetRequest = "GET "+ path +" HTTP/1.1 " + CRLF  // request line
                + "Host: "+ host + CRLF
                + CRLF;
        // get bytes of this request using proper encodings
        byte[] bytesOfRequest = rawHttpGetRequest.getBytes(Charset.forName("UTF-8)"));
        // create & connect to socket
        Socket socket = connectSocket(host);
        // get socket output stream
        OutputStream outputStream = socket.getOutputStream();
        // write to the stream a get request we created
        outputStream.write(bytesOfRequest);
        // return socket with written get request
        return  socket;
    }

    /**
     * create, connect and write to socket simple http get request
     * then dump response of this request
     * @throws IOException
     */
    public void writeToSocketAndDumpResponse() throws IOException {
        // send request to http server for / page content
        Socket socket = writeGetToSocket("google.com", "/");
        // now we will read response from server
        InputStream inputStream = socket.getInputStream();
        // create a byte array buffer to read respons in chunks
        byte[] buffer = new byte[1024];
        // define a var to hold count of read bytes from stream
        int weRead;
        // read bytes from sockets till exhausted or read time out will occurred ( as we didn't add in raw get header Connection: close (default keep-alive)
        while ((weRead = inputStream.read(buffer)) != -1) {
            // print what we have read
            System.out.print(new String(buffer));
        }
    }
}