求救 一起研究多线程网络
比如a客户端登陆服务器 显示a在线 b登陆显示 a b在线 同时a客户端应刷新列表 为 a b在线 依此类推如果是c/s的,有人上线,服务端向所有用户广播,同时客户端开启一个线程去监听服务端发来的消息,然后你在刷新列表显示,或者让他的图标改成上线即可,如果是web的,写一个易做图监听session,页面ajax循即可,如果是第三方类库,比如smack,直接使用它提供的易做图即可,如果你想知道怎么实现的,看它的源码即可。。。。。。
服务端向所有用户广播 怎样实现啊 --------------------编程问答-------------------- 迭代服务端的用户列表,拿到socket,发消息 --------------------编程问答-------------------- 这不就是飞鸽么。。 --------------------编程问答-------------------- package com.server;
import java.io.*;
import java.net.*;
import com.thread.*;
import com.tools.AddThread;
import com.tools.ThreadScoket;
import com.model.*;
public class TestServerSocket {
public static void main(String args[]){
try {
ServerSocket ss= new ServerSocket(9999);
while(true){
Socket s = ss.accept();
System.out.println("连接成功");
ObjectInputStream buf = new ObjectInputStream(s.getInputStream());
//ObjectOutputStream buw = new ObjectOutputStream(s.getOutputStream());
//BufferedWriter buw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
User user=(User)buf.readObject();
//读取客户端信息
System.out.println("用户登录"+user.getName());
ThreadScoket thread = new ThreadScoket(s);
System.out.println("test");
thread.run();
System.out.println("test2");
//AddThread.addSocket(user.getName(), thread);
//启动线程
//thread.notify();
}
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
--------------------编程问答-------------------- package com.tools;
import java.io.*;
import java.net.*;
import java.util.*;
import com.tools.*;
public class ThreadScoket extends Thread{
Socket s;
public ThreadScoket(Socket s){
this.s=s;
}
//通知其他线程 告知 s已被添加 并更新他们的客户端
public void notity(String s){
HashMap hm=AddThread.hashMap;
Iterator it=hm.keySet().iterator();
while(it.hasNext())
{
String id= it.next().toString();
try {
//取得与客户端的线程
//ObjectOutputStream oos=new ObjectOutputStream(AddThread.getSocket(id).getOutputStream());
//oos.writeObject(s);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
}
}
public void run() {
while(true){
try {
//ObjectInputStream buf = new ObjectInputStream(s.getInputStream());
// ObjectOutputStream buw = new ObjectOutputStream(s.getOutputStream());
Thread.sleep(10000);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
--------------------编程问答-------------------- package com.client;
import java.io.*;
import java.net.*;
import com.tools.*;
import com.model.*;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket s = new Socket("127.0.0.1",9999);
// BufferedReader buf = new BufferedReader(new InputStreamReader(s.getInputStream()));
ObjectOutputStream buw = new ObjectOutputStream(s.getOutputStream());
User user=new User();
user.setName("b");
buw.writeObject(user);
System.out.println("客户端发生成功2");
//ThreadScoket th = new ThreadScoket(s);
//th.run();
//AddThread.addSocket(user.getName(), th);
} catch (Exception e) {
// TODO: handle exception
}
}
}
怎么客户端只能连一次 啊 那个服务器端的thread.run();关掉 就可以连多个 怎么回事
补充:Java , Java SE