服务器端
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();}
}
}
}
分享到:
相关推荐
两步学会JavaSocket编程两步学会JavaSocket编程两步学会JavaSocket编程
一个用java做的简单类似于QQ,飞鸽的局域网聊天系统
有关javasocket实现qq聊天功能,和javaMail的demo详解,还是多线程的
JavaSocket编程.pdf
javasocket通信编程 代码,基本的javasocket通信
资源名称:JAVA Socket编程资料汇总资源目录:【】Java Socket 编程模拟Ftp【】Java Socket多人在线考试系统源程序【】JavaSocket线程实现多客户的机制以及获取ip地址【】JavaSocket通讯例程【】三步学会JavaSocket...
基于JavaSocket多客户端并发通信聊天程序的设计与实现..pdf基于JavaSocket多客户端并发通信聊天程序的设计与实现..pdf基于JavaSocket多客户端并发通信聊天程序的设计与实现..pdf基于JavaSocket多客户端并发通信聊天...
基于JavaSocket多客户端并发通信聊天程序的设计与实现..docx基于JavaSocket多客户端并发通信聊天程序的设计与实现..docx基于JavaSocket多客户端并发通信聊天程序的设计与实现..docx基于JavaSocket多客户端并发通信...
javasocket的相关协议,英文版的,大家看看
很好的java socket 教程,很好的java socket 教程
javasocket多线程.pdf
总结javasocket编程.doc
javaSocket聊天室
javaSocket带界面聊天室
javaSocket共16页.pdf.zip