忍者ブログ
メモ、備忘録、その他雑記を記載します。 ただし、このHPに記載している情報を利用した結果 損失・損害等が発生したとしても筆者は責任を持ちません。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

javaのsocket通信 サーバプログラムのサンプルです。

関連:クライアントプログラムサンプル

import java.io.*;
import java.net.*;

/**
 * サーバクラス
 *
 * @author
 * @version 1.0
 */
public class Sv {

    static final String strHowTo = "help: java Sv port";

    /**
     * スタートアップ
     */
    public static void main(String[] args) {

        // 引数チェック
        if (args.length != 1) {
            System.err.println( strHowTo );
            return;
        }

        try {
            // サーバソケットの作成
            ServerSocket svsock = new ServerSocket(Integer.parseInt(args[0]));
            svsock.setSoTimeout( 1000 );
            int nCnt = 0;

            // メインルーチン
            Socket sock = null;
            for (;;) {
                // 終了判定
            //    if ( nCnt > 5 ) {
            //        break;
            //    }

                // クライアントからの接続を受け付ける。
                try {
                    sock = svsock.accept();
                }
                catch( SocketTimeoutException e ) {
                    continue;
                }
                nCnt++;

                sock.setTcpNoDelay( true );
                System.out.println("accept");

                // クライアントとの入出力部分はスレッドとして起動する。
                new ThreadCmdRes( sock ).start();
                System.out.println("Waiting for New Connection...");
            }
        }
        catch( SocketException e ) {
            System.err.println("Socket Error!");
            e.printStackTrace();
        }
        catch( IOException e ) {
            System.err.println("IO Error!");
            e.printStackTrace();
        }
        catch (Exception e) {
            System.err.println("Error!");
            e.printStackTrace();
        }
    }
}

/**
 * コマレス処理スレッドクラス
 *
 * @author
 * @version 1.0
 */
class ThreadCmdRes extends Thread {

    private Socket socket = null;

    /**
     * コンストラクタ
     * @param sock クライアントと接続済みのソケットを渡す。
     */
    public ThreadCmdRes(Socket sock) {
        this.socket = sock;
    }

    /**
     * ファイナライザ
     * 念のためソケットの破棄を行っている。
     */
    protected void finalize() {
        try {
            socket.close();
        } catch (Exception e) {}
    }

    public void run() {
        try {
            // 文字列受信処理
            InputStream is = socket.getInputStream();
            BufferedReader bufreader
              = new BufferedReader(
                    new InputStreamReader( is ) );
            System.out.println("入力ストリーム取得");

            // 入力されるまで待つ
            while ( is.available() == 0 ) {
                Thread.sleep( 10 );
                continue;
            }

            String line = null;
            line = bufreader.readLine();
            System.out.println( line );
            System.out.println("文字列受信処理");

            // メッセージ送信
            BufferedWriter bufwriter
              = new BufferedWriter(
                  new OutputStreamWriter( socket.getOutputStream() ) );
            bufwriter.write( "Send sv -> cl" );
            bufwriter.newLine();
            bufwriter.flush();
            System.out.println( "文字列送信処理" );

            // 後処理
            bufreader.close();
            bufwriter.close();
            socket.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

拍手[0回]

PR
コメントを書く
お名前
タイトル
メールアドレス
URL
コメント   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
パスワード
 HOME | 21  19  18  17  16  13  12  11  10  9  8 
Admin / Write
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
Ace
性別:
非公開
バーコード
ブログ内検索
P R
忍者アナライズ
忍者ブログ [PR]