基于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(); } }
相关文章推荐
- Android Socket编程基于TCP实现客户端与服务器简易通信
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP同步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- Java Socket应用(五)——编程实现基于 TCP 的 Socket 通信
- 基于C#的socket编程的TCP异步实现
- 基于VFW的MFC编程实现简易摄像头抓拍
- 基于C#的socket编程的TCP异步实现
- 基于C#的socket编程的TCP异步实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 基于C#的socket编程的TCP异步实现
- java实现的基于TCP网络编程步骤
- linux下第一个socket编程实现的局域网内通信(基于TCP)
- Java网络编程实践和总结 --- 基于TCP的Socket编程之实现文件上传和下载服务
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现