Socket编程(二)随时接收客户端消息及多客户端连接
来源:互联网 发布:nginx 后端服务器宕机 编辑:程序博客网 时间:2024/06/16 06:25
使服务器具有随时接收消息的能力
使用类似于心跳包的方法进行测试
SocketClient
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;public class SocketClient {public static void main(String[] args) {SocketClient client = new SocketClient();client.start();}public void start() {BufferedReader inputReader = null;// 从socket读取BufferedReader reader = null;BufferedWriter writer = null;Socket socket = null;// Alt + Shift + z try...catch等快捷键// 从Console读取内容try {socket = new Socket("127.0.0.1", 9898);// 用于读取服务器返回的数据reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 从socket进行写入writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));inputReader = new BufferedReader(new InputStreamReader(System.in));startServerReplyListener(reader);String inputContent;while (!(inputContent = inputReader.readLine()).equals("bye")) {writer.write(inputContent + "\n");writer.flush();//System.out.println(inputContent);//// 服务器返回的数据//String response = reader.readLine();//System.out.println(response);}} catch (Exception e) {e.printStackTrace();} finally {try {reader.close();writer.close();inputReader.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}/** * 接收服务器消息的监听器 * 需要一直运行 */public void startServerReplyListener(final BufferedReader reader) {new Thread(new Runnable() {public void run() {try {String response;while ((response = reader.readLine()) != null) {System.out.println(response);}} catch (IOException e) {e.printStackTrace();}}}).start();}}
SocketServer
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.Timer;import java.util.TimerTask;public class SocketServer {BufferedWriter writer;public static void main(String[] args) {SocketServer socketServer = new SocketServer();socketServer.startServer();}public void startServer() {ServerSocket serverSocket = null;BufferedReader reader = null;Socket socket = null;try {// 端口号只要不冲突就行serverSocket = new ServerSocket(9898);System.out.println("server started..");// 进入阻塞状态,等待客户端接入socket = serverSocket.accept();System.out.println("client " + socket.hashCode() + " connected");// 从socket中读取数据reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));/* * 首次发送延迟3s * 每次心跳时间间隔为3s */new Timer().schedule(new TimerTask() {public void run() {try {System.out.println("heart beat once..");writer.write("heart beat once..\n"); // 记得加换行符(\n),否则会不被认为已经结束writer.flush();} catch (IOException e) {e.printStackTrace();}}}, 3000, 3000);String receiveMsg;while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束System.out.println(receiveMsg);writer.write("server reply:" + receiveMsg + "\n");writer.flush();}} catch (Exception e) {e.printStackTrace();} finally {try {reader.close();writer.close();socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
和多个客户端建立通信的功能
SocketServer
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class SocketServer {BufferedWriter writer;BufferedReader reader;public static void main(String[] args) {SocketServer socketServer = new SocketServer();socketServer.startServer();}public void startServer() {ServerSocket serverSocket = null;Socket socket = null;try {// 端口号只要不冲突就行serverSocket = new ServerSocket(9898);System.out.println("server started..");while (true) {// 进入阻塞状态,等待客户端接入socket = serverSocket.accept();manageConnection(socket);}} catch (Exception e) {e.printStackTrace();} finally {try {socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}public void manageConnection(final Socket socket) {new Thread(new Runnable() {public void run() {try {System.out.println("client " + socket.hashCode() + " connected");// 从socket中读取数据reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String receiveMsg;while ((receiveMsg = reader.readLine()) != null) { // 以"\n"结束System.out.println("client " + socket.hashCode() + ":" + receiveMsg);writer.write("server reply:" + receiveMsg + "\n");writer.flush();}} catch (IOException e) {e.printStackTrace();} finally {try {reader.close();writer.close();} catch (IOException e) {e.printStackTrace();}}}}).start();}}
0 0
- Socket编程(二)随时接收客户端消息及多客户端连接
- JAVA SOCKET网络编程,服务端接收多个客户端连接的实现
- socket编程(二)---- 使用套接字连接多个客户端
- java网络编程(二)复用Socket连接以及使用多线程完成多个客户端的连接
- socket编程多客户端
- java网络socket编程(二)之Socket客户端
- Python socket编程学习(二)socket客户端
- Socket编程 消息传送 TCP协议(窗口实现) 客户端
- Socket编程 消息传送 UDP协议(窗口实现) 客户端
- ServerSocket和Socket建立通信(客户端发送消息服务器接收并返回到客户端接收输出)
- ServerSocket和Socket建立通信(客户端发送消息服务器接收并返回到客户端接收输出)
- 多客户端通过服务器接收转发消息
- socket多客户端连接服务器
- Socket编程简单实现服务端客户端连接
- android Socket长连接及多客户端管理
- JAVA SOCKET 服务端/客户端可随时从任意一方发消息的例子
- Socket简介及客户端服务器连接实例
- C++socket客户端select异步连接发送接收数据
- 对象存储定义
- 第八章 JAVA的封装
- MySql 命令窗口创建
- Django 外键操作
- Processing binary structured data with Python
- Socket编程(二)随时接收客户端消息及多客户端连接
- 第九章 JAVA中的继承
- 对象存储Amazon S3的诞生
- 动态规划专题之----198. House Robber
- 第十章 JAVA多态初步学习
- 一些常用数据结构的数组实现 不定期更新
- maven 学习笔记(一)安装
- OpenStack Swift发展历程
- 第十一章 JAVA异常与异常处理