JavaによるTCP/IPのミニマム実装

  • ソケットアドレス … IPアドレスとポート番号をひとつにまとめた概念のこと。
クライアント側
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) throws UnknownHostException, IOException {
        // ソケットのオープン
        Socket socket = new Socket();
        
        // ソケットアドレスのバインド
        socket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 7070));
        
        // コネクション要求(SYN要求)の送信
        socket.connect(new InetSocketAddress(InetAddress.getLocalHost(), 8080));
        
        // ESTAB状態になったら、出力ストリームを取得する
        DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
        
        // 送信処理
        outputStream.writeInt(0xff);
        outputStream.flush();
        
        // クローズ処理
        socket.close();
        outputStream.close();
    }
}
サーバ側
import java.io.DataInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class Server {
    public static void main(String[] args) throws UnknownHostException, IOException {
        // ソケットのオープン
        ServerSocket serverSocket = new ServerSocket();
        
        // ソケットアドレスのバインド
        serverSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 8080));
        
        // コネクション要求受け入れ準備(LISTEN状態)
        Socket socket = serverSocket.accept();
        
        // ESTAB状態になったら、入力ストリームを取得する
        DataInputStream inputStream = new DataInputStream(socket.getInputStream());
        
        // 受信処理
        int data = inputStream.readInt();
        
        // コンソール出力
        System.out.println(data);
        
        // クローズ処理
        socket.close();
        inputStream.close();
        serverSocket.close();
    }
}
出力結果(サーバ側のみ)
255