鄙人以MyEclipse为平台实现简单的聊天程序
1、创建一个Server类模块:创建ServerSocket,在指定端口监听;当有用户登录, 接受套接字输入流,显示其登录信息,调用ServerHander线程进行管理。
代码实现:
public class Server {
private ServerSocket server;
public Server(int port) throws IOException{
server = new ServerSocket(port); // new一个实例对象端口
while(true){
Socket conn=server.accept(); //建立客户端套接字
DataInputStream in =new DataInputStream(conn.getInputStream());
String who=in.readUTF();
System.out.print("Client" +"(ip:"+conn.getInetAddress()+")"+who+" 进入!"+"\n");
ServerHander cn=new ServerHander(who,conn);
cn.start();
}
}
public static void main(String []args)throws IOException{
new Server(9595);
}
}//Server类模块结束
2、创建ServerHander模块:这个模块是整个服务器实现与客户端交互的核心代码,互相添加或者解密关键字,实现群聊、私聊上下线提醒的功能,创建Vector 对象,可以方便用户管理,Vector对象是可变数组,可以实现线程同步。用户发送消息通过关键字@进行解析 ,@前面的字符串为发送的消息,后面的字符串为发送对象。
2.1创建线程
Socket socket;
DataInputStream in;
DataOutputStream out;
String who;
protected static Vector<ServerHander>user=new Vector<ServerHander>();//把用户线程放入可变对象数组
public ServerHander(String name,Socket socket) throws IOException{
this.who = name;
this.socket = socket;
in =new DataInputStream(new BufferedInputStream(socket.getInputStream()));
out =new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
}
public void run(){
try{
user.addElement(this); //Vector中增加新线程
sendallclient(who+"上线");
senduser();//为每一个客户端更新在线用户
while(true){
String news=in.readUTF();
int index = news.lastIndexOf("@");/