请问Socket服务器如何向客户端发送多种数据?
是这样的,我做一个模仿QQ的东西,一开始服务器启动,客户端连接,服务器建立新线程与客户端交流。
客户端向服务器发送信息,客户端接收信息后回馈一条成功接收的指令。
问题来了,我想要服务器不仅能发送成功接收的指令给客户端,还要发送其他数据,例如目前多少人在线,怎样做到把这两种数据分开发送给客户端?
我用的是:
PrintStream out = new PrintStream(client.getOutputStream());
?out.println(“成功接收”);
如何做到客户端能区分服务器发来是的是成功接收指令还是客户端数量,而不是把他们都当成成功接收指令来对待?
------解决方案--------------------呵呵,这个很容易啊。
我以前写的聊天发消息是这么处理的,先定义一个消息类接口:
import java.io.Serializable;
//消息类型接口
public interface Message extends Serializable{
public static final int SYSTEM_NOTICE=0;//系统公告消息
public static final int SYSTEM_CLOSE=1;//系统关闭消息
public static final int CHAT_MESSAGE=2;//普通聊天信息
public static final int USER_LOGIN_MESSAGE=3;//用户上线消息
public static final int USER_EXIT_MESSAGE=4;//用户下线消息
public int getMessageType();//获取消息类型
}
然后分别定义了几个实现类:
package com.yangwen.object.message;
//聊天消息
public class ChatMessage implements Message{
private int index=0;//消息源
private int toIndex=0;//消息目的地
private String content=null;//消息内容
public ChatMessage(int index, int toIndex, String content) {
this.index = index;
this.toIndex = toIndex;
this.content = content;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getToIndex() {
return toIndex;
}
public void setToIndex(int toIndex) {
this.toIndex = toIndex;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getMessageType() {
return Message.CHAT_MESSAGE;
}
}
package com.yangwen.object.message;
//系统公告消息
public class SystemNoticeMessage implements Message{
private String content=null;//公告内容
public SystemNoticeMessage(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getMessageType() {
return Message.SYSTEM_NOTICE;
}
}
这里列举了两个,其他的不赘述了,发送数据时用writeObject()
接受数据时用readObject,先用Message类型接受(多态性),然后根据getType()得到的值,进行向下类型转换即可
------解决方案--------------------传对象 对象可以是map对象 就可以了