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" ); } } |
上記処理にタイムアウト処理をつけたバージョンは、こちら
関連記事
コメントを残す