JAVA多线程Socket实现
来源:互联网 发布:2013十大网络流行语 编辑:程序博客网 时间:2024/06/04 18:02
JAVA多线程Socket实现
代码简单实现客户询问10086客户个人账户套餐信息demo。代码主要分为客户端Client和服务端MultiThreadServer两个.java类。
服务端代码:
package cn.thread.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadServer {
private static final int PORT = 10086;//协议端口
private ServerSocket serverSocket;//服务端ServerSocket
private ExecutorService executorService;
private final int POOL_SIZE = 10;//线程池数量
public MultiThreadServer() throws IOException {
serverSocket = new ServerSocket(PORT);
executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);
System.out.println("服务已启动");
}
public void service() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept();
executorService.execute(new Handler(socket));
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
}
}
class Handler implements Runnable {
public static final String CHARCODE = "utf-8";
private Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void run() {
BufferedReader br = null;
PrintWriter out = null;
try {
br = getReader(socket);
out = getWriter(socket);
String msg = null;
String res = null;//回馈用户语
while ((msg = br.readLine()) != null) {
switch (Integer.parseInt(msg)) {
case 1:
System.out.println("10086客服接收到用户咨询:" + msg);
res = "客户您的套餐是每月38元包含420分钟";
break;
case 2:
System.out.println("10086客服接收到用户咨询:"+msg);
res = "客户您的套餐是最优惠的暂时不能更换";
break;
case 3:
System.out.println("10086客服接收到用户咨询:"+msg);
res = "再见";
break;
default:
System.out.println("10086客服接收到用户咨询:"+msg);
res = "您好请问有什么需要帮助?";
break;
}
System.out.println("10086客户发出回复:"+res);
out.println(res);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
if (out != null) {
out.close();
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadServer {
private static final int PORT = 10086;//协议端口
private ServerSocket serverSocket;//服务端ServerSocket
private ExecutorService executorService;
private final int POOL_SIZE = 10;//线程池数量
public MultiThreadServer() throws IOException {
serverSocket = new ServerSocket(PORT);
executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);
System.out.println("服务已启动");
}
public void service() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept();
executorService.execute(new Handler(socket));
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
}
}
class Handler implements Runnable {
public static final String CHARCODE = "utf-8";
private Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void run() {
BufferedReader br = null;
PrintWriter out = null;
try {
br = getReader(socket);
out = getWriter(socket);
String msg = null;
String res = null;//回馈用户语
while ((msg = br.readLine()) != null) {
switch (Integer.parseInt(msg)) {
case 1:
System.out.println("10086客服接收到用户咨询:" + msg);
res = "客户您的套餐是每月38元包含420分钟";
break;
case 2:
System.out.println("10086客服接收到用户咨询:"+msg);
res = "客户您的套餐是最优惠的暂时不能更换";
break;
case 3:
System.out.println("10086客服接收到用户咨询:"+msg);
res = "再见";
break;
default:
System.out.println("10086客服接收到用户咨询:"+msg);
res = "您好请问有什么需要帮助?";
break;
}
System.out.println("10086客户发出回复:"+res);
out.println(res);
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
if (out != null) {
out.close();
}
}
}
}
客户端代码:
package cn.thread.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static final String CHARCODE = "utf-8";
public static void main(String[] args) {
Socket socket = null;
int port = 10086;
OutputStream socketOut = null;
BufferedReader br = null;
try {
socket = new Socket("localhost", port);
// 发送消息
String msg = "1";
// String msg2 = "2";
System.out.println("用户发出咨询:" + msg);
// System.out.println("用户发出咨询2:"+msg2);
msg = msg + "\r\n";
socketOut = socket.getOutputStream();
socketOut.write(msg.getBytes(CHARCODE));
// socketOut.write(msg2.getBytes(CHARCODE));
socketOut.flush();
socket.shutdownOutput();
// 接收服务器的反馈
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String res = br.readLine();
if (res != null) {
System.out.println("客户接收10086客户回复:" + res);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
if (socketOut != null) {
try {
socketOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static final String CHARCODE = "utf-8";
public static void main(String[] args) {
Socket socket = null;
int port = 10086;
OutputStream socketOut = null;
BufferedReader br = null;
try {
socket = new Socket("localhost", port);
// 发送消息
String msg = "1";
// String msg2 = "2";
System.out.println("用户发出咨询:" + msg);
// System.out.println("用户发出咨询2:"+msg2);
msg = msg + "\r\n";
socketOut = socket.getOutputStream();
socketOut.write(msg.getBytes(CHARCODE));
// socketOut.write(msg2.getBytes(CHARCODE));
socketOut.flush();
socket.shutdownOutput();
// 接收服务器的反馈
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String res = br.readLine();
if (res != null) {
System.out.println("客户接收10086客户回复:" + res);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
if (socketOut != null) {
try {
socketOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
0 0
- JAVA多线程Socket实现
- java实现socket多线程代码
- java nio socket实现多线程多用户通信
- java实现多线程的socket通信技术
- Java 用 socket实现多线程访问
- java-Socket实现多线程服务器程序
- java多线程socket实现简单的聊天
- 简单实现多线程Socket
- ExecutorService实现多线程socket
- socket 实现多线程聊天
- java socket多线程代码
- java多线程Socket例子
- java socket多线程聊天室
- Flex+Java Socket多线程
- Flex+Java Socket多线程
- Java多线程Socket资料
- Java Socket多线程
- java socket多线程聊天室
- 给Java新手的一些建议----Java知识点归纳
- 了解lvm
- Math的基本用法
- Java自定义异常
- Apache 与 Tomcat 区别联系
- JAVA多线程Socket实现
- <form> 表单里的method(post/get)方法
- Vue小案例—todo list
- explicit关键字学习
- 【一头扎进JMS】(1)----JMS基础
- Spring面试总结
- Spark Scheduler模块源码分析之DAGScheduler
- Hibernate的基本使用学习
- vsCode编辑器background插件背景设置!