情况是这样的,有一个服务器类,有个HashMap类型的属性,作为链接池。当一个链接过来的时候,就把该链接和输入输出流包装成一个对象,放入到HashMap里,当第二个链接过来的时候,又把该链接和输入输出流包装成一个对象放入到里面。但是后来的链接对象总是会覆盖掉前面的对象,不管链接多少个,最后连接池里,只有一个链接,也就是最后一个链接。不知道是什么原因,有高手解答下吗
解决方案 »
- 不懂得问题
- 线程同步及waite问题,谢谢!
- project > build automatically 这个是什么意思??
- 有关自定义ClassLoader的问题
- !!深入探讨JVM:Java线程同步使用的“监视器”和“对象锁”是不是一回事?他们的关系如何?
- 帮我一下!
- 我用Socket读取web server 上html网页的内容,但不知web server是怎么结束发送内容的??
- 关于启动!!
- software engineering with java
- comparator接口与Comparable接口的区别。
- 各位大侠,麻烦看这个程序的结果为什么这样
- 泛型<T extends Car>和泛型<? extends Car>
public Socket socket;
private ObjectOutputStream objectout;
private ObjectInputStream objectin;
private Hashtable<String, Connection>map ;
private Connection connectioninf;
private Message message;
// 重写构造函数
public ServiceThread(Socket s ,Hashtable m) throws IOException, ClassNotFoundException {
socket = s;
System.out.println("连接上");
System.out.println("线程池"+m);
map = m;
objectout = new ObjectOutputStream(socket.getOutputStream());
objectin = new ObjectInputStream(socket.getInputStream());
connectioninf = new Connection();
connectioninf.setObjectin(objectin);
connectioninf.setObjectout(objectout);
connectioninf.setSocket(socket);
String d = (String)objectin.readObject();
System.out.println(d);
map.put("d", connectioninf);
System.out.println(map);
System.out.println("放入连接池");
System.out.println(map);
start();
} // 重写run方法 处理客户端的服务请求 public void run() {
while(true){
try {
message = (Message)objectin.readObject();
String p = message.getReceiver();
System.out.println(p);
Connection c =map.get(p);
System.out.println(map);
System.out.println(c);
c.getObjectout().writeObject(message.getMesaage());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }}
connectioninf.setSocket(socket);
String d = (String)objectin.readObject();
System.out.println(d);//map.put("d", connectioninf);
map.put(d, connectioninf);
楼主你再试试