private Socket sock;
こんな変数を見つけたのがことの始まりでした。
なにこれ?ってことで、
P2Pにとっては、かなり重要そうな感じがしたので勉強することに
メモ
java.net.Socket
「このクラスは、クライアントソケット (単に「ソケット」とも呼ばれる) を実装します。ソケットとは、2 つのマシン間で通信を行う際の端点のことです。」
java.net.ServerSocket
「このクラスはサーバーソケットを実装します。サーバーソケットは、ネットワーク経由で要求が送られてくるのを待ちます。これは、その要求に基づいていくつかの操作を実行します。その後、場合によっては要求元に結果を返します。」
それでは、勉強開始!!
JavaでHelloWorld ソケット編というのを参考に
まずは、サーバー側のソースコード
package socket; import java.io.*; import java.net.*; public class HelloWorldMultiThreadServer { public static void main(String argv[]) { try { // 指定されたポートにバインドされたサーバーソケットを作成します。 ServerSocket serverSocket = new ServerSocket(5555); // メインループ while (true) { try { System.out.println("クライアントからの接続をポート5555で待ちます"); // accept()は serverSocketに対する接続要求を待ち、それを受け取ります。 Socket socket = serverSocket.accept(); System.out.println(socket.getInetAddress() + "から接続を受付ました"); // 処理をスレッドに任せます new Connect(socket); } catch (Exception ex) { ex.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } } } class Connect extends Thread { private Socket socket = null; public Connect(Socket socket) { this.socket = socket; // スレッド開始 this.start(); } public void run() { try { // ソケットの出力ストリームを取得 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // ソケットの入力ストリームを取得 BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); // 読み込んだ行をそのまま出力ストリームに書き出す String inputLine; while ((inputLine = in.readLine()) != null) { out.println(inputLine); } System.out.println("処理が終了したので接続を切ります"); // 入出力ストリームを閉じる in.close(); out.close(); // ソケットを閉じる socket.close(); } catch (Exception e) { try { socket.close(); } catch (Exception ex) { e.printStackTrace(); } } } }次に、クライアント側のソースコード
package socket; import java.net.*; import java.io.*; public class HelloWorldSocketClient { public static void main(String[] args) { try { // ストリームソケットを作成し、指定された IPアドレスの指定されたポート番号に接続します。 Socket socket = new Socket("localhost", 5555); // ソケットの出力ストリームを取得 PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // ソケットの入力ストリームを取得 BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); // 「Hello World」をサーバーに送る out.println("Hello World"); // 読み込んだデータを表示 System.out.println(in.readLine()); // 入出力ストリームを閉じる out.close(); in.close(); // ソケットを閉じる socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
このソースコード書いた人すごいなー。
ソースコード読んだだけでソケットがなんとなくわかっちまったぜ。
ちょっと引っかかってしまったのが、入出力ストリーム。
感覚的にはわかったんだが、理解はしてない。
あとで、勉強だな。
参考文献
JavaでHelloWorld ソケット編
0 件のコメント:
コメントを投稿