TCPクライアントの例


GoogleにTCPで接続してレスポンス取得するだけのサンプルです。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.SocketException;
import java.nio.charset.Charset;

public class TcpClient {
    private String host;
    private int port;
    private Socket socket;
    
    public TcpClient(String host, int port) throws IOException {
        this.host = host;
        this.port = port;
    }
    public void connect() {
        try {
            socket = new Socket(host, port);
            initSocket();
            doConversation();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    protected void initSocket() throws IOException {
        socket.setSoTimeout(30*1000); // 30sec
        try {
            socket.setTcpNoDelay(true);
        } catch (SocketException e) {
            // do-nothing
        }
    }
    private void doConversation() throws IOException {
        sendRequest();
        receiveResponse();
    }
    protected void sendRequest() throws IOException {
        OutputStreamWriter writer = new OutputStreamWriter(
                new BufferedOutputStream(socket.getOutputStream()),
                Charset.forName("UTF-8"));
        writer.write("GET / HTTP/1.1\n");
        writer.write("Host: www.google.co.jp\n");
        writer.write("\n\n");
        writer.flush();
        socket.shutdownOutput(); // half-close
    }
    protected void receiveResponse() throws IOException {
        InputStreamReader reader = new InputStreamReader(
                new BufferedInputStream(socket.getInputStream()),
                Charset.forName("UTF-8"));
        char[] buffer = new char[8192];
        int count = -1;
        while ((count = reader.read(buffer)) >= 0) {
            System.out.println(buffer);
        }
    }

    public static void main(String[] args) throws IOException {
        new TcpClient("www.google.co.jp", 80).connect();
    }
}