当前位置: 代码迷 >> J2SE >> server程序如何使用Vector保存client列表?有现成代码,但是错了,哪位高手来帮小弟我改改!(><)~
  详细解决方案

server程序如何使用Vector保存client列表?有现成代码,但是错了,哪位高手来帮小弟我改改!(><)~

热度:98   发布时间:2016-04-23 19:39:56.0
server程序怎么使用Vector保存client列表?有现成代码,但是错了,谁来帮我改改!!!~~~~(>_<)~~~~
static Vector<BufferedWriter> clients = new Vector(10);//保存客户端的连接信息 
ServerSocket server = new ServerSocket(1234);//服务器监听的端口号
MultiThreadServer mc = new MultiThreadServer(server.accept());//开始监听
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//利用BufferedReader实现数据的快速接收,getInputStream()获取socket底层数据输入流,InputStreamReader()实现字节到字符串的高校读取
BufferedWriter out =new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
//利用BufferedWriter实现数据的快速写入,getOutputStream()获取socket底层数据输出流,OutputStreamWriter()实现字节到字符串的高校写入
//以下出错
clients.add(1,out);//使用的多线程哈,每个socket连接都有一个线程,保存当前客户端的连接信息(就是这里出错了)
BufferedWriter send = (BufferedWriter) clients.get(1);//取得指定客户端连接信息(就是这里出错了)
send.write("我发送给指定的客户端");

------解决思路----------------------
clients.add(1,out);


   public void add(int index, E element) {
        insertElementAt(element, index);
    }

   public synchronized void insertElementAt(E obj, int index) {
modCount++;
if (index > elementCount) {
    throw new ArrayIndexOutOfBoundsException(index
     + " > " + elementCount);
}
ensureCapacityHelper(elementCount + 1);
System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
elementData[index] = obj;
elementCount++;
    }

初始elementCount为0,你直接插入到1,因此if (index > elementCount) {
    throw new ArrayIndexOutOfBoundsException(index
     + " > " + elementCount);
}
即add(int,E)实际是替换已存在的元素,否则抛异常。你直接add()或add(0,out) 应该就好了
  相关解决方案