您的位置:首页 > 理论基础 > 计算机网络

基于BIO的TCP编程简易实现

2016-12-27 22:51 274 查看

服务端

为了对一定并发量的保证,以及使机器不至于在过高并发中瘫痪,采用线程池控制最大线程量的方式去维护

但BIO中的方法是阻塞的,在实际开发中几乎不被使用,而都采用java1.7后的NIO2.0版

public class BIOBootstrap {
public static void main(String[] args) throws Exception {
start4();
}

@SuppressWarnings("deprecation")
private static void start4() throws Exception {

//1、创建ServerSocket
ServerSocket servletSocket=new ServerSocket();
//2、绑定监听端口
servletSocket.bind(new InetSocketAddress(9999));

ExecutorService executorService=Executors.newFixedThreadPool(150);

while (true) {
//3、监听服务窗口 block

4000
System.out.println("我在监听9999服务窗口");
final Socket socket = servletSocket.accept();
executorService.submit(new Runnable() {

public void run() {
//套路
//1、读取请求
try {
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is,
Charset.forName("utf-8"));
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println("我是服务器,我收到了...你在说(" + sb.toString()
+ ")...你...什么时候..会回来呢?");
//2、服务器响应
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.println("time:" + new Date().toLocaleString());
pw.flush();
socket.shutdownOutput();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}

}


客户端

public class Bootstrap {
public static void main(String[] args) throws Exception {
for(int i=0;i<16;i++){
new Thread(){
public void run() {
String re;
try {
re = sendMessage("我是msi...请问...有人在..在么?");
System.out.println(re);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}

private static String sendMessage(String msg) throws Exception {
//1、创建socket
Socket socket=new Socket();
//2、连接服务器
socket.connect(new InetSocketAddress("127.0.0.1", 9999));
//套路
//1、发送消息
OutputStream os= socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.println(msg);
pw.flush();
socket.shutdownOutput();
//2、接收消息
InputStream is = socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is, Charset.forName("utf-8"));
BufferedReader br=new BufferedReader(isr);

StringBuilder sb=new StringBuilder();
String line=null;
while((line=br.readLine())!=null){
sb.append(line);
}

return sb.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: