[Java]ソケットからデータを受信する

Javaでソケットからデータを受信するサンプルです。

プログラムを起動すると、ポート4949で待ち受けを行います。

クライアントから接続後、データを10byte受信すると、受信データを画面表示します。
また、受信データはsjis(厳密にはcp932)が来る事を想定しています。

package com.nanoappli.test;
 
import java.io.*;
import java.net.*;
import java.util.Arrays;
 
public class HelloWorld
{
    public static void main( String args[] ) {
        int READ_BUFF_LEN = 2000;
        System.out.println( "start" );
        try {
            byte []readBuff = new byte[ READ_BUFF_LEN ];
            ServerSocket socket = new ServerSocket( 4949, 1, InetAddress.getByName( "192.168.1.1" ) );
 
 
            while( true ) {
                /*----------------------------------*/
                /* クライアントからの接続待ちに入る */
                /*----------------------------------*/
                System.out.println( "接続待ち:" + socket.toString() );
                Socket clientSocket = socket.accept();
                System.out.println( "接続しました:" );
 
 
                /*--------------------------------------------*/
                /* データの受信を行う(10byte受信するまで待つ) */
                /*--------------------------------------------*/
                InputStream inStream = clientSocket.getInputStream();
                int readPos = 0;
                while ( readPos < 10 ) {
                    int inputLen = inStream.read( readBuff, readPos, READ_BUFF_LEN-readPos );
                    readPos += inputLen;
                }
 
                /*----------------------------*/
                /* 受信したデータを表示する   */
                /* 文字コードははSJISとみなす */
                /*----------------------------*/
                byte []readBuff2 = Arrays.copyOfRange( readBuff, 0, readPos );
                System.out.println( "データを受信しました:" + new String( readBuff2, "Windows-31J" ) );
 
                /*------------------------*/
                /* ソケットをクローズする */
                /*------------------------*/
                clientSocket.close();
            }
 
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
 
        System.out.println( "end" );
    }
}



上記処理にタイムアウト処理をつけたバージョンは、こちら

関連記事

コメントを残す

メールアドレスが公開されることはありません。