ServerSocketの使い方

戻る

::::::::::::::
Client.java
::::::::::::::
/**
* $Id: ServerThread.html,v 1.1 2009/06/22 16:11:56 kishi Exp kishi $
*/

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

public class Client {
    public static void main( String[] args ) {
        try {
            Socket sock = new Socket( "localhost", 54321 );

            PrintWriter out = new PrintWriter( sock.getOutputStream(), true );
            BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                        sock.getInputStream() ) );

            out.println( new Date() );
            out.flush();

            System.out.println( in.readLine() );

            out.close();
            in.close();
            sock.close();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
    }
}

::::::::::::::
Server.java
::::::::::::::
import java.io.*;
import java.net.*;
import java.util.*;

/**
* $Id: ServerThread.html,v 1.1 2009/06/22 16:11:56 kishi Exp kishi $
*/

public class Server {

    public static void main( String argv[] ) {
        try {
            //
            // create server socket
            //
            int portNumber = 54321;
            ServerSocket serverSocket = new ServerSocket( portNumber );
            System.out.println( "server started: portNumber=" + portNumber );

            while ( true ) {
                try {
                    Socket sock = serverSocket.accept();
                    System.out.println( sock.getInetAddress() + " accepted" );

                    //
                    // スレッドを生成してデータのやり取りをする
                    //
                    new ServerThread( sock );

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


::::::::::::::
ServerThread.java
::::::::::::::
import java.io.*;
import java.net.*;
import java.util.*;

/**
* $Id: ServerThread.html,v 1.1 2009/06/22 16:11:56 kishi Exp kishi $
*/

public class ServerThread extends Thread {
    private Socket sock = null;

    public ServerThread( Socket sock ) {
        this.sock = sock;
        this.start();
    }

    public void run() {
        try {
            PrintWriter out = new PrintWriter( sock.getOutputStream(), true );
            BufferedReader in = new BufferedReader(
                                    new InputStreamReader( sock.getInputStream() ) );

            String inputLine;
            while ( ( inputLine = in.readLine() ) != null ) {
                System.out.println( "request: " + inputLine );
                out.println( "WELCOME: " + + sock.hashCode() );
            }

            in.close();
            out.close();
            sock.close();

        } catch ( Exception e ) {
            try {
                sock.close();
            } catch ( Exception ex ) {
                e.printStackTrace();
            }
        }
    }
}

■実行結果

$ java -cp . Server
server started: portNumber=54321
/127.0.0.1 accepted
request: Fri May 12 10:30:30 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:31 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:31 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:31 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:32 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:32 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:32 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:33 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:33 JST 2006
/127.0.0.1 accepted
request: Fri May 12 10:30:33 JST 2006

$ for i in `seq 1 10`; do java -cp . Client; done
WELCOME: 4384790
WELCOME: 9634993
WELCOME: 1641745
WELCOME: 11077203
WELCOME: 14576877
WELCOME: 33263331
WELCOME: 6413875
WELCOME: 21174459
WELCOME: 827574
WELCOME: 17510567

戻る inserted by FC2 system