socketsAan de slag met stopcontacten


Opmerkingen

Deze sectie geeft een overzicht van wat sockets zijn en waarom een ontwikkelaar deze misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen sockets vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de Documentatie voor sockets nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Maak een niet-aangesloten socket, probeer er verbinding mee te maken en controleer of de verbinding tot stand is gebracht

 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();
        }
    }

}
 

Een socketklasse-object instantiëren

Een socket instantiëren kan op verschillende manieren.

  1. door 2-lijn aangifte en instantiëring:

    Eerst moeten we een variabele definiëren die een Socket-klasseobject bevat:

    Socket socket;
     

    dan kunnen we een Socket-klasseobject maken:

    socket = new Socket();
     
  2. We kunnen ook een definitie & instantiëring van één regel maken:

    Socket  socket = new Socket();
     

beide manieren zullen een niet-verbonden socket maken.

We kunnen andere geparametriseerde constructors gebruiken om geconnecteerde of niet-verbonden socketklasseobjecten te instantiëren:

Zie specificaties voor klassedoc:

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

Schrijf een eenvoudig http-verzoek naar socket en dump reactie

/** 
 * 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));
        }
    }
}