JavaA2Z

KAB-studio > プログラミング > JavaA2Z > TCPとは

TCP

日本語 送信管理規約
英語 Transmission Control Protocol
ふりがな てぃーしーぴー
フリガナ ティーシーピー

解説

コンピューター間の通信方法のひとつ。
 
コンピューター間の通信方法には、主に「TCP」と「UDP」がある。
TCP通信は、HTTP等のプロトコルを用いて決まった規約に基づき送受信をう。
ストリーム」と呼ばれる文字列の送受信をうことで通信をう。基本的には、クライアントから「命令」を文字列やそれに伴うバイナリーデータを送信し、サーバから結果となる文字列やバイナリーなデータが返される、という「対話」によって処理がわれる。
TCPはUDPに比べて処理が確実で分かりやすい分少し処理に時間が掛かるが、現在では通信速度の心配が少ないこと、基本的なプロトコルが決められていることもあり、TCPがネットワーク通信の中心となっている。
 
Javaでは、TCPの通信はSocketクラスを用いてソケット通信をい実現する。
また、たとえばHTTPであればHttpURLConnectionクラスのように、各プロトコル専用のクラスも存在する。プロトコルが決まっている場合にはこのようなクラスを使用した方がいいだろう。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.net.Socket;
import java.net.ServerSocket;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        // ポート番号12345で通信します。
        // ……もし、ポート番号12345が空いてないとダメです。
        // その場合はこの数字を他のにしてください。
        final int PORT = 12345;

        // サーバーは別スレッドで。
        // もちろん、普通は「別のプログラム」をサーバーにします。
        ServerThread thread = new ServerThread( PORT );
        thread.start();

        try
        {
            // このスレッドを3秒止めます。
            // サーバー側の準備ができるのを待つためです。
            Thread.sleep( 3 * 1000 );
        }
        catch( InterruptedException e )
        {
            // sleep()メソッドを呼んでいる間に割り込みが入ると
            // InterruptedException例外が投げられます。
            e.printStackTrace();
        }

        // 以下、クライアント側の処理。

        // finallyでclose()するためここで宣言します。
        OutputStreamWriter outputStreamWriter = null;
        Socket socket = null;
        try
        {
            // このマシンの、PORTのポート番号でアクセスします。
            socket = new Socket( "localhost", PORT );

            // サーバーに文字列を出力するためのストリームを取得します。
            outputStreamWriter = new OutputStreamWriter( socket.getOutputStream() );

            // 文字列をサーバー側に出力します。
            System.out.println( "[クライアント]「あいうえお」を出力します。" );
            outputStreamWriter.write( "あいうえお", 0, 5 );
            outputStreamWriter.flush();
            System.out.println( "[クライアント]「あいうえお」を出力しました。" );
            // [サーバー]待機開始!
            // [サーバー]待機終了。
            // [サーバー]出力開始。
            // [クライアント]「あいうえお」を出力します。
            // あ
            // い
            // う
            // え
            // お
            // [クライアント]「あいうえお」を出力しました。
            // [サーバー]出力完了。
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( outputStreamWriter != null )
                {
                    outputStreamWriter.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            // ソケットを閉じます。
            try
            {
                if( socket != null )
                {
                    socket.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

/**
*   サーバー側。
*/
class ServerThread extends Thread
{
    /** ポート番号 */
    private int port;

    /**
    *   コンストラクタ。
    */
    public ServerThread( int port )
    {
        this.port = port;
    }
    
    /**
    *   サーバーを起動します。
    */
    public void run()
    {
        // finallyでclose()するためここで宣言します。
        Socket socket = null;
        ServerSocket serverSocket = null;
        InputStreamReader inputStreamReader = null;
        try
        {
            // サーバーを作ります。
            serverSocket = new ServerSocket( port );

            // クライアントからのアクセスを待機開始!
            System.out.println( "[サーバー]待機開始!" );
            socket = serverSocket.accept();
            System.out.println( "[サーバー]待機終了。" );

            // クライアントから送られてきた文字列を受け取る
            // ストリームを用意します。
            inputStreamReader = new InputStreamReader( socket.getInputStream() );

            // 文字を出力します。
            System.out.println( "[サーバー]出力開始。" );
            while( true )
            {
                // read()メソッドで1文字取得します。
                int i = inputStreamReader.read();
                if( i == -1 )
                {
                    // -1が来たら終了です。
                    break;
                }

                // 文字として出力します。
                System.out.println( (char)i );
            }
            System.out.println( "[サーバー]出力完了。" );
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( inputStreamReader != null )
                {
                    inputStreamReader.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            // ソケット2とも閉じます。
            try
            {
                if( serverSocket != null )
                {
                    serverSocket.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( socket != null )
                {
                    socket.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}
// Sample.java
import java.net.Socket;
import java.net.ServerSocket;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        // ポート番号12345で通信します。
        // ……もし、ポート番号12345が空いてないとダメです。
        // その場合はこの数字を他のにしてください。
        final int PORT = 12345;

        // サーバーは別スレッドで。
        // もちろん、普通は「別のプログラム」をサーバーにします。
        ServerThread thread = new ServerThread( PORT );
        thread.start();

        try
        {
            // このスレッドを3秒止めます。
            // サーバー側の準備ができるのを待つためです。
            Thread.sleep( 3 * 1000 );
        }
        catch( InterruptedException e )
        {
            // sleep()メソッドを呼んでいる間に割り込みが入ると
            // InterruptedException例外が投げられます。
            e.printStackTrace();
        }

        // 以下、クライアント側の処理。

        // finallyでclose()するためここで宣言します。
        OutputStreamWriter outputStreamWriter = null;
        Socket socket = null;
        try
        {
            // このマシンの、PORTのポート番号でアクセスします。
            socket = new Socket( "localhost", PORT );

            // サーバーに文字列を出力するためのストリームを取得します。
            outputStreamWriter = new OutputStreamWriter( socket.getOutputStream() );

            // 文字列をサーバー側に出力します。
            System.out.println( "[クライアント]「あいうえお」を出力します。" );
            outputStreamWriter.write( "あいうえお", 0, 5 );
            outputStreamWriter.flush();
            System.out.println( "[クライアント]「あいうえお」を出力しました。" );
            // [サーバー]待機開始!
            // [サーバー]待機終了。
            // [サーバー]出力開始。
            // [クライアント]「あいうえお」を出力します。
            // あ
            // い
            // う
            // え
            // お
            // [クライアント]「あいうえお」を出力しました。
            // [サーバー]出力完了。
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( outputStreamWriter != null )
                {
                    outputStreamWriter.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            // ソケットを閉じます。
            try
            {
                if( socket != null )
                {
                    socket.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

/**
*   サーバー側。
*/
class ServerThread extends Thread
{
    /** ポート番号 */
    private int port;

    /**
    *   コンストラクタ。
    */
    public ServerThread( int port )
    {
        this.port = port;
    }
    
    /**
    *   サーバーを起動します。
    */
    public void run()
    {
        // finallyでclose()するためここで宣言します。
        Socket socket = null;
        ServerSocket serverSocket = null;
        InputStreamReader inputStreamReader = null;
        try
        {
            // サーバーを作ります。
            serverSocket = new ServerSocket( port );

            // クライアントからのアクセスを待機開始!
            System.out.println( "[サーバー]待機開始!" );
            socket = serverSocket.accept();
            System.out.println( "[サーバー]待機終了。" );

            // クライアントから送られてきた文字列を受け取る
            // ストリームを用意します。
            inputStreamReader = new InputStreamReader( socket.getInputStream() );

            // 文字を出力します。
            System.out.println( "[サーバー]出力開始。" );
            while( true )
            {
                // read()メソッドで1文字取得します。
                int i = inputStreamReader.read();
                if( i == -1 )
                {
                    // -1が来たら終了です。
                    break;
                }

                // 文字として出力します。
                System.out.println( (char)i );
            }
            System.out.println( "[サーバー]出力完了。" );
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( inputStreamReader != null )
                {
                    inputStreamReader.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            // ソケット2とも閉じます。
            try
            {
                if( serverSocket != null )
                {
                    serverSocket.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( socket != null )
                {
                    socket.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

  • (参照している単語はありません)
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/15
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。