1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java Socket多线程异步通信

Java Socket多线程异步通信

时间:2020-05-26 12:02:03

相关推荐

Java Socket多线程异步通信

独角兽企业重金招聘Python工程师标准>>>

服务端

package com.ninemax.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .ServerSocket;import .Socket;public class SocketServer {public static void main(String[] args) {try {// 监听端口ServerSocket server = new ServerSocket(9999);// 获取客户端链接Socket client = server.accept();// 获取客户端输入流BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));// 获取客户端输出流PrintWriter out = new PrintWriter(client.getOutputStream());// 获取系统输入流BufferedReader sys_in = new BufferedReader(new InputStreamReader(System.in));// 启动接收消息线程new ReceiveMsgThread(server, in, out, sys_in, client).start();// 启动发送消息线程new SendMsghread(out, sys_in, true).start();} catch (IOException e) {e.printStackTrace();}}}

客户端

package com.ninemax.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .InetAddress;import .Socket;import .UnknownHostException;public class SocketClient {public static void main(String[] args) {try {// 获取客户端链接Socket client = new Socket(InetAddress.getLocalHost(), 9999);System.out.println("客户端是否连接成功:" + client.isConnected());// 获取客户端输入流BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));// 获取系统输入流BufferedReader sys_in = new BufferedReader(new InputStreamReader(System.in));// 获取客户端输出流PrintWriter out = new PrintWriter(client.getOutputStream());// 启动发送消息线程new SendMsghread(out, sys_in, false).start();// 启动接收消息线程new ReceiveMsgThread(client, in, out, sys_in).start();} catch (UnknownHostException e) {System.out.println("Host is error!");e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

发送消息线程

package com.ninemax.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;public class SendMsghread extends Thread {// 输出流PrintWriter out;// 输入流BufferedReader in;// 判断服务器是否启动boolean isServer;public SendMsghread(PrintWriter out, BufferedReader in, boolean isServer) {this.out = out;this.in = in;this.isServer = isServer;}@Overridepublic void run() {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {while(true){if(isServer){out.println("Server "+sf.format(new Date())+"\n\t"+ in.readLine());}else{out.println("client "+sf.format(new Date())+"\n\t"+ in.readLine());}out.flush();}} catch (IOException e) {e.printStackTrace();}}}

接收消息线程

package com.ninemax.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.PrintWriter;import .ServerSocket;import .Socket;public class ReceiveMsgThread extends Thread {// 输入流BufferedReader in;// 输入流BufferedReader sys_in;// 输出流PrintWriter out;// 服务端socketServerSocket server;// 客户端socketSocket client;public ReceiveMsgThread(ServerSocket server, BufferedReader in,PrintWriter out, BufferedReader sys_in, Socket client) {this.in = in;this.server = server;this.client = client;this.out = out;this.sys_in = sys_in;}public ReceiveMsgThread(Socket client,BufferedReader in, PrintWriter out,BufferedReader sys_in) {this.in = in;this.client = client;this.out = out;this.sys_in = sys_in;}@Overridepublic void run() {try {while(true){String info = in.readLine();while(info !=null){System.out.println(info);info = in.readLine();}if(in.readLine().equals("end")){break;}}in.close();out.close();sys_in.close();if(client != null){client.close();}server.close();} catch (IOException e) {e.printStackTrace();}}}

运行结果图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。