メモ、備忘録、その他雑記を記載します。
ただし、このHPに記載している情報を利用した結果 損失・損害等が発生したとしても筆者は責任を持ちません。
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();
}
}
}
関連:クライアントプログラムサンプル
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();
}
}
}
PR
コメントを書く