`
xkorey
  • 浏览: 151366 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

javasocket a

阅读更多
服务器端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;


public class EchoServer {

private int port = 8000;

private ServerSocket serverSocket;

private ExecutorService executorService;

private final int pool_size = 4;

private int portForShutdown = 8001;

private ServerSocket serverSocketForShutdown;

private boolean isShutdown = false;

private Thread shutdownThread = new Thread(){
public void start(){
this.setDaemon(true);
super.start();
}
public void run(){
while(!isShutdown){
Socket socketForShutdown = null;
try{
socketForShutdown = serverSocketForShutdown.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socketForShutdown.getInputStream()));
String command = br.readLine();
if(command.equals("shutdown")){
long beginTime = System.currentTimeMillis();
socketForShutdown.getOutputStream().write("服务器正在关闭\r\n".getBytes());
isShutdown = true;
executorService.shutdown();
while(!executorService.isTerminated())
executorService.awaitTermination(30,TimeUnit.SECONDS);
serverSocket.close();
long endTime = System.currentTimeMillis();
socketForShutdown.getOutputStream().write("服务器已经关闭".getBytes());
socketForShutdown.close();
serverSocketForShutdown.close();
}else{
socketForShutdown.getOutputStream().write("错误在命令/r/n".getBytes());
socketForShutdown.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
};

public EchoServer() throws IOException{

serverSocket = new ServerSocket(port);

serverSocket.setSoTimeout(60000);

serverSocketForShutdown = new ServerSocket(portForShutdown);


executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*pool_size);

shutdownThread.start();

System.out.println("服务器启动。。。。");

}

public void service(){
while(!isShutdown){
Socket socket = null;
try{
socket = serverSocket.accept();
socket.setSoTimeout(60000);
executorService.execute(new Handler(socket));
}catch(SocketTimeoutException e){
//
}catch(RejectedExecutionException e){
try{
if(socket != null) socket.close();
}catch(IOException x){return;}
}catch(SocketException e){
if(e.getMessage().indexOf("socket closed")!= -1 ){return;}
}catch(IOException e){e.printStackTrace();}
}
}

public static void main(String a[]) throws IOException{
new EchoServer().service();
}
}

客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class EchoClient {

public void sendMsg() throws UnknownHostException, IOException{
boolean b = true;
while(b){
Socket s = new Socket("localhost",8000);
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);  
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));  
String msg = line.readLine();
if(msg.equals("shutdown")){
b=false;
System.out.println("客户端退出。");
return ;
}
s.getOutputStream().write(msg.getBytes());
out.flush();
out.close();  
s.close();
}
}

public static void main(String[]a) throws UnknownHostException, IOException{
new EchoClient().sendMsg();
}

}
关闭服务器的客户端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class AdminClient {

public static void main(String a[]){

Socket socket = null;

try{
socket = new Socket("localhost",8001);
OutputStream socketOut = socket.getOutputStream();
socketOut.write("shutdown\r\n".getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = null;
while((msg=br.readLine())!= null)
System.out.println(msg);

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(socket != null)socket.close();}catch(IOException e){e.printStackTrace();}
}
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics