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();
}


}

控制台信息:


0 0
原创粉丝点击