Android消息推送1----原始的socket长链接
来源:互联网 发布:易语言文本处理源码 编辑:程序博客网 时间:2024/05/21 06:58
模拟一个服务器端和多个客户端的链接,并随时保持收发消息:
服务器段代码:
public class SocketServer {
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();//如果没有客户端的链接,一直在阻塞状态,以下代码都不之行
//接受每一个客户端的socket,各自在自己的线程中执行
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() {
@Override
public void run() {
BufferedReader reader = null;
BufferedWriter writer =null;
try {
System.out.println("client " + socket.hashCode() + " connedted");
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String receivedMsg;
while ((receivedMsg = reader.readLine()) != null) {
System.out.println("client " + socket.hashCode() + ": " + receivedMsg);//socket.hashCode()
writer.write("server reply: " + receivedMsg + "\n");
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
客户端代码:
public class SocketClient {
public static void main(String[] args) {
SocketClient client = new SocketClient();
client.start();
}
public void start() {
BufferedReader inputReader = null;
BufferedReader reader = null;
BufferedWriter writer = null;
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 9898);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
inputReader = new BufferedReader(new InputStreamReader(System.in));
startServerReplyListener(reader);
String inputContent;
int count = 0;
while (!(inputContent = inputReader.readLine()).equals("bye")) {
writer.write(inputContent);
if (count % 2 ==0) {
writer.write("\n");
}
count++;
writer.flush();
}
} 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() {
@Override
public void run() {
try {
String response;
while ((response = reader.readLine()) != null) {
System.out.println(response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
控制台信息:
- Android消息推送1----原始的socket长链接
- android 简单推送socket长链接
- android 消息推送时,长连接的使用(websocket)
- 消息推送之Socket----长连接和心跳
- android 建立Socket长链接 服务端 - 客户端代码(+1)
- android的消息推送
- Android 的消息推送
- android的消息推送
- Android短链接方式实现消息推送
- Android socket 编程 实现消息推送
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- Android回顾之如何实现android和服务器长连接呢?推送消息的原理
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- 【Android开发】如何实现android和服务器长连接呢?推送消息的原理
- input checkbox 复选框的操作示例
- XML概述
- 如何在终端输出带颜色的字体?PHP CLI输出颜色
- activity的启动模式
- Linux开启mysql远程连接的设置步骤
- Android消息推送1----原始的socket长链接
- HDU1285拓扑排序实例分析
- IOS学习 UIDatePicker 包含时间格式转换
- strlen()与sizeof
- linux 进程的虚拟地址和内核中的虚拟地址有什么关系
- class.getResource()用法
- FTP 服务器搭建
- Hadoop数据压缩
- 最简真分数