实现:现在想同时连接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、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();
}
}
}
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();
}
}
}
}