易采站长站为您分析基于socket实现的一个简单的Android聊天工具,实现方法简单,具有一定的参考价值,感兴趣的朋友可以参考一下
特简单, 没有数据库, 还没有处理各种异常。
登录:输入用户名点击的登录即可。
发送消息: 特定格式->toUser:message
1. 服务器:保存在线用户
public class Online {
private static Online mOnline = null;
private LinkedHashMap<String, Socket> mOnlines = new LinkedHashMap<String, Socket>();
private Online() {
}
public synchronized static Online getInstance() {
if(null == mOnline) {
mOnline = new Online();
}
return mOnline;
}
public void put(String key, Socket socket) {
if(!mOnlines.containsKey(key)) {
mOnlines.put(key, socket);
}
}
public Socket get(String key) {
return mOnlines.get(key);
}
public void remove(String key) {
mOnlines.remove(key);
}
}
2. 服务器:一个简单的socket服务器
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
// login:uid
// send:fromuser:touser:message
// logout:uid
public class Server implements Runnable {
private Socket mSocket;
private Online mOnline;
public Server(Socket socket) {
mSocket = socket;
mOnline = Online.getInstance();
}
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
mSocket.getInputStream()));
String cmd = reader.readLine();
// login
if (cmd.startsWith("login")) {
String userName = cmd.split(":")[1];
mOnline.put(userName, mSocket);
System.out.println(userName + " login...");
PrintWriter writer = new PrintWriter(mSocket.getOutputStream());
writer.println("success");
writer.flush();
} else if (cmd.startsWith("send")) {
System.out.println(cmd);
String[] cmds = cmd.split(":");
String from = cmds[1];
Socket to = mOnline.get(cmds[2]);
String msg = cmds[3];
PrintWriter writer = new PrintWriter(to.getOutputStream());
System.out.println("rec:" + from + ":" + cmds[2] + ":" + msg);
writer.println("rec:" + from + ":" + cmds[2] + ":" + msg);
writer.flush();
}else if (cmd.startsWith("logout")) {
System.out.println(cmd);
String user = cmd.split(":")[1];
mOnline.get(user).close();
mOnline.remove(user);
PrintWriter writer = new PrintWriter(mSocket.getOutputStream());
writer.println("success");
writer.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8888);
boolean flag = true;
while (flag) {
new Thread(new Server(server.accept())).start();
System.out.println("user in...");
}
server.close();
}
}










