实现:现在想同时连接100个客户端,并且不与服务器断开,测试连接的速度。
问题:1、run()方法跑完就断了,close()全注释了
           2、如果注释掉socket.shutdownOutput(),线程就阻塞了,但for循环走不通
           3、那么该如何创建100个连接?
public class Client { public static void main(String[] args) { try {
//for (int i = 0; i < 100; i++) {
// 1、创建客户端Socket,指定服务器端口号和地址
Socket socket = new Socket("localhost", 1111);
// 2、获取输出流,向服务器发送信息
OutputStream os = socket.getOutputStream(); // 字节输出流
PrintWriter pw = new PrintWriter(os); // 将输出流包装为打印流
pw.write("用户名:tom; 密码:123" );
pw.flush();
//socket.shutdownOutput(); // 关闭输出流
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr); String info = null;
// 循环读取
while ((info = br.readLine()) != null) {
System.out.println("我是客户端:服务器说:" + info);
}
//Thread.sleep(5000);
// }
// br.close();
// is.close();
// isr.close();
//
//
// pw.close();
// os.close();
// socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import com.liuyan02.MyRunnable;public class ServerDemo { public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(1111);// 创建服务器Socket对象
int count = 0;
ExecutorService pool = Executors.newFixedThreadPool(100);
System.out.println("服务器已启动,请连接。");
//
while (true) {
Socket s = ss.accept();// 监听客户端的连接 // ServerThread st = new ServerThread(s);
//pool.submit(new ServerThread(s));
pool.execute(new ServerThread(s));
// 创建新线程
// new ServerThread(s).start();
// new Thread(st).start();
count++;
System.out.println("客户端的数量:" + count);
} } catch (IOException e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;public class ServerThread implements Runnable { Socket socket = null;  public ServerThread(Socket socket) {
     // TODO Auto-generated constructor stub
     this.socket = socket;
     }
    @Override
    public void run() { InputStream is = null;
    InputStreamReader isr = null;
    BufferedReader br = null; OutputStream os = null;
    PrintWriter pw = null; try {
    // 获取一个输入流,并读取客户端的信息
    is = socket.getInputStream();
    isr = new InputStreamReader(is);// 将字节流转换为字符流
    br = new BufferedReader(isr);
    String info = null;
    // 循环读取数据
    while ((info = br.readLine()) != null) {
    System.out.println("我是服务器,客户端说:" + info);
    }
    //socket.shutdownInput(); // 获取输出流,响应客户端的请求
    os = socket.getOutputStream();
    pw = new PrintWriter(os);
    // pw.println(" ");
    // pw.println("<html><body>Hello,world.</body></html>");
    pw.print("hello");
    pw.flush();// 将缓存输出
    //br.close();
    //pw.close();
    //socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    } finally { try {
    if (pw != null)
    pw.close();
    if (is != null)
    is.close();
    if (os != null)
    os.close();
    if (isr != null)
    isr.close();
    if (br != null)
    br.close();
    if (socket != null)
    socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }