标签:
源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686
自定义异常的目的是为了更好的表示出错的原因,能够针对不同的异常执行不同的处理。
package SimpleChat; public class ChatException extends Exception{ /** * */ private static final long serialVersionUID = 1L; public ChatException() {} public ChatException(String desc) { super(desc); } }聊天程序的所有异常都应该继承这个类。这个的实现是很简单的,稍微懂点Java的都能看懂。
举一个请求消息的例子:
from:wapoonx
to:xwp
command:send
hello
以上就是一个发送消息的请求,from字段表明这个消息是从谁发送过来的。to这个字段表明要发送给谁,也就是接收方是谁。command这个字段表明要执行的命令。以一个空行为标志。隔开正文和头部字段。在这个例子中正文是hello。服务器会根据command字段,从请求报文中选取自己想要的信息。
举一个响应消息的例子:
code:0
description:success
(注意这里是空的正文)
以上是一个响应消息的格式,code这个字段代表的是一个响应码,这个响应码代表着服务器执行响应的客户请求的结果,0代表成功,其他代表出错。description是响应消息的描述。不同的描述在客户端可能有不同的处理。package SimpleChat; import java.util.Map; import java.util.TreeMap; public class RequestMessage { private String from = ""; private String to = ""; private String command = ""; private String rawContext = ""; public RequestMessage() { } public RequestMessage(String raw) { parse(raw); } public String getFrom() { return from; } public String getTo() { return to; } public String getCommand() { return command; } public String getContext() { return rawContext; } public void setFrom(String f) { from = f; } public void setTo(String to) { this.to = to; } public void setCommand(String cmd) { this.command = cmd; } public void setContext(String con) { rawContext = con; } public String Format() { String res = "from:" + from+ "\r\n"; res += "to:" + to + "\r\n"; res += "command:" + command + "\r\n\r\n"; res += rawContext; return res; } private void parse(String raw) { String[] temp = raw.split("\r\n\r\n"); String[] fields = temp[0].split("\r\n"); if (temp == null || fields == null) { return ; } for (int i = 0; i < fields.length; ++i) { if (fields[i].indexOf("from:") == 0) { from = fields[i].substring("from:".length()); } else if (fields[i].indexOf("to:") == 0) { to = fields[i].substring("to:".length()); } else if (fields[i].indexOf("command:") == 0) { command = fields[i].substring("command:".length()); } } if (temp.length == 2) { rawContext = temp[1]; } } public static Map<String, String> parseContext(String rawContext) throws ChatMessageException { if (rawContext == null || rawContext.equals("")) { return new TreeMap<String, String>(); } Map<String, String> context = new TreeMap<String, String>(); String[] temp = rawContext.split("\r\n"); for (int i = 0; i < temp.length; ++i) { String[] res = temp[i].split(":"); if (res.length == 2) { context.put(res[0], res[1]); } else { throw new ChatMessageException("response message is invaild. context's format error"); } } return context; } public Map<String, String> parseContext() throws ChatMessageException { return parseContext(this.rawContext); } }
标签:
原文地址:http://blog.csdn.net/sky453589103/article/details/51351398