JAva Socket(二)
6278 ワード
前回java socket一対一通信の例を作りました今回は一対多の通信を書きます.ここではjavaのマルチスレッドを使って実現します.
まずサービス類を見てみましょう
次に、サービス側がリクエストに応答するクラス、すなわちsocketを書きます.
次に、前回のクライアントsocketを利用します.
このように簡単にマルチクライアントがsocketに応答すれば
リクエストが送信されるたびに、サービス側にスレッドが追加され、個別にサービスされます.
まずサービス類を見てみましょう
/**
*
*/
package com.dnion.socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
***************************************************************
* :JavaThread
* :MultiJabberServer
* :2012-8-23 02:38:20
* :
* :
* :
* :
* ------------------------------------------------------------
*
*
*
* :
* @version
***************************************************************
*/
public class MultiJabberServer {
/**
* :main
* :
* :
* :2012-8-23 02:38:20
* @param @param args
* @return void
*/
public static void main(String[] args) {
ServerSocket s = null;
Socket socket = null;
try {
s = new ServerSocket(8080);
// 、
while(true){
socket = s.accept();
System.out.println("socket:"+socket);
new ServeOneJabbr(socket);
}
} catch (Exception e) {
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
try {
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
次に、サービス側がリクエストに応答するクラス、すなわちsocketを書きます.
/**
*
*/
package com.dnion.socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
/**
***************************************************************
* :JavaThread
* :ServeOneJabbr
* :2012-8-23 02:34:13
* :
* :
* :
* :
* ------------------------------------------------------------
*
*
*
* :
* @version
***************************************************************
*/
public class ServeOneJabbr extends Thread{
private Socket socket = null;
private BufferedReader br = null;
private PrintWriter pw = null;
public ServeOneJabbr(Socket s){
socket = s;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
String str;
try {
str = br.readLine();
if(str.equals("END")){
br.close();
pw.close();
socket.close();
break;
}
System.out.println("Client Socket Message:"+str);
pw.println("Message Received");
pw.flush();
} catch (Exception e) {
try {
br.close();
pw.close();
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
次に、前回のクライアントsocketを利用します.
/**
*
*/
package com.dnion.socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
/**
***************************************************************
* :JavaThread :JabberClient :2012-8-23 01:47:12
* :
* :
* :
* :
* ------------------------------------------------------------
*
*
*
*
*
* :
*
* @version
***************************************************************
*/
public class JabberClient {
/**
* :main : : :2012-8-23 01:47:12
*
* @param @param args
* @return void
*/
public static void main(String[] args) {
Socket socket = null;
BufferedReader br = null;
PrintWriter pw = null;
try {
// socket
socket = new Socket("127.0.0.1", JabberServer.PORT);
System.out.println("Socket=" + socket);
//
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())));
for (int i = 0; i < 10; i++) {
pw.println("howdy " + i);
pw.flush();
String str = br.readLine();
System.out.println(str);
}
pw.println("END");
pw.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
System.out.println("close......");
br.close();
pw.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
このように簡単にマルチクライアントがsocketに応答すれば
リクエストが送信されるたびに、サービス側にスレッドが追加され、個別にサービスされます.