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 件のコメント:
コメントを投稿