当前位置:编程学习 > JAVA >>

求救 一起研究多线程网络

比如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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,