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) 应该就好了