网络编程复习(一):最原始的BIO网络编程
发布日期:2021-11-13 10:21:47
浏览次数:16
分类:技术文章
本文共 3086 字,大约阅读时间需要 10 分钟。
为什么叫最原始,是因为不适于真正的开发环境,原始的BIO缺点很明显,这是很古老的网络编程,大家都知道,Windows下一个程序最大的线程数为1000个,而linux下也最多支持2000的线程数,先不说这种编程的内存够不够容纳一千个线程,就算可以达到1000个线程并发,但也是很少,而且这是阻塞形式的TCP网络编程模式,因此不适合真正的开发环境,这里仅为复习,下面看看代码,容后将介绍其他方式:
Client客户端:
package 网络编程_最原始;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class Client { public static void main(String[] args) { PrintWriter writer = null; BufferedReader reader = null; Socket client = null; try { client = new Socket("127.0.0.1", 8888); writer = new PrintWriter(client.getOutputStream(), true);//该地方必须加true,设置为自动刷新 reader = new BufferedReader(new InputStreamReader(client.getInputStream())); writer.println("接收客户端发送请求"); System.out.println("请求已经发出"); String body = reader.readLine(); System.out.println(body); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } if (writer != null) { writer.close(); } if (client != null) { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } client = null; } } }}server服务端:
package 网络编程_最原始;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server { static ServerSocket server = null; public static void main(String[] args) { try { server = new ServerSocket(8888); System.out.println("server start..."); Socket socket = server.accept(); new Thread(new HanderSocket(socket)).start(); } catch (IOException e) { e.printStackTrace(); }finally { if(server!=null){ try { server.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } server = null; } } }}处理链接的任务类HanderSocket:
package 网络编程_最原始;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class HanderSocket implements Runnable{ Socket socket = null; public HanderSocket(Socket socket) { this.socket = socket; } @Override public void run() { BufferedReader reader = null; PrintWriter writer = null; try { reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); writer = new PrintWriter(this.socket.getOutputStream(),true); String body = null; while(true){ body = reader.readLine(); if(body == null) break; System.out.println(body); writer.println("你好,服务端已经接收到你的请求"); System.out.println("已经向客户端反馈结果"); } } catch (Exception e) { e.printStackTrace(); }finally { if(writer !=null){ writer.close(); } if(reader !=null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } socket = null; } } }}输出结果:
client:
请求已经发出你好,服务端已经接收到你的请求server端:
server start...接收客户端发送请求已经向客户端反馈结果
转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78117797 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月17日 08时20分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
将网站程序放在tmpfs下
2019-04-27
使用Nginx的proxy_cache缓存功能取代Squid
2019-04-27
nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
2019-04-27
nginx 的proxy_cache才是王道
2019-04-27
Nginx proxy_cache 使用示例
2019-04-27
Nginx源代码分析 - 日志处理
2019-04-27
使Apache实现gzip压缩
2019-04-27
Memcached在大型网站中应用
2019-04-27
Hadoop简要介绍
2019-04-27
squid中的X-Cache和X-Cache-Lookup的意义
2019-04-27
squid 优化指南
2019-04-27
centos vnc配置笔记
2019-04-27
让Squid 显示本地时间
2019-04-27
linux mysql 命令 大全
2019-04-27
清除Squid缓存的小工具
2019-04-27
Varnish Cache 3.0.0安装
2019-04-27
2011年6月编程语言关注度排行
2019-04-27
Varnish使用小结
2019-04-27
千万级并发HAproxy均衡负载系统介绍
2019-04-27
什么是A记录、MX记录、CNAME记录
2019-04-27