服务器端
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();}
}
}
}
分享到:
相关推荐
Java SOCKET通信聊天系统是一种基于Java编程语言实现的网络通信应用,它允许用户在局域网内进行类似QQ或飞鸽的即时通讯。该系统的核心是Java的Socket编程,这是一种网络编程接口,使得客户端和服务器之间可以建立...
【Java Socket编程基础】 Java Socket编程是Java网络编程的核心部分,允许两个网络应用程序之间进行双向通信。Socket提供了低级别的、面向连接的、基于TCP/IP的通信机制,它封装了网络通信的一些细节,使得开发者...
资源名称:JAVA Socket编程资料汇总资源目录:【】Java Socket 编程模拟Ftp【】Java Socket多人在线考试系统源程序【】JavaSocket线程实现多客户的机制以及获取ip地址【】JavaSocket通讯例程【】三步学会JavaSocket...
Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、基于TCP/IP的通信机制。在Java Socket编程中,我们可以创建服务器端(ServerSocket)来监听客户端(Socket)的连接请求,然后...
在给定的“javaSocket”压缩包中,包含了一个TCP聊天室服务器(TCPChatRoomServer)和一个对应的客户端(TCPChatRoomClient)的源代码。这些代码可以帮助我们理解如何在Java中实现基于Socket的网络通信。 首先,让...
JAVA源码javaSocket通信实现代码
Flex与javasocket通讯.pdf
【JSP+Flex+JavaSocket+jQuery+Ajax聊天】是一个技术综合的应用实例,它整合了多种前端和后端技术,为用户提供类似QQ的聊天体验。下面将分别介绍这些技术及其在聊天应用中的作用。 **JSP(JavaServer Pages)**是...
JAVA源码JavaSocket聊天通信演示代码
用JavaSocket编程开发聊天室。 目的或任务:通过指导学生上机实践,对JavaSocket编程、Java多线程、Java图形用户界面进行掌握。 基本要求: 1.了解实验目的及实验原理; 2.编写程序,并附上程序代码和结果图; 3....
Java Socket编程是网络编程的基础,主要用于实现客户端与服务器之间的通信。在Java中,Socket类代表一个网络连接,它允许应用程序通过TCP/IP协议进行双向通信。本篇将详细讲解如何使用Java Socket实现QQ聊天功能以及...
javaSocket-haiyong.zip是一个Java编程资源包,主要包含了与Java Socket编程相关的教程、示例代码和工具。这个资源包旨在帮助Java开发者更好地理解和掌握Socket编程技术,提高网络通信应用的开发效率。 适用人群: ...
在"java_javaweb_javasocket_"这个主题中,我们将深入探讨Java的基础,Java Web开发以及Java Socket编程。 首先,让我们从Java语言结构开始。Java的核心特性包括封装、继承和多态性,这些都是面向对象编程的关键...
在这个实验集合中,我们看到“1708010138-张增昊_javaweb_javaweb_javasocket_Javaweb实验_”的标题暗示了这是一个关于JavaWeb和Java套接字(JavaSocket)的学习实践项目,可能由学生张增昊在学习过程中完成。...
Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、双向通信的接口。在本文中,我们将深入探讨如何使用Java Socket来实现一个简单的Tomcat服务器,这涉及到网络编程的一些基本概念...
在这个“基于javaSocket聊天室”项目中,我们将会探讨如何利用Java的Socket API创建一个简单的聊天室,其中不仅支持文本聊天,还具备文件传输功能。 首先,让我们了解Java Socket的基本概念。Java Socket是Java提供...
用 JavaSocket 编程开发聊天室 用 Java 图形用户界面编写聊天室服务器端和客户端, 支持多个客户端连接到一个服务器。每个客户端能够输入账号。 可以实现群聊(聊天记录显示在所有客户端界面)。 完成好友列表在...