传送IO特点
阻塞点
server.accept();
inputStream.read(bytes);

单线程情况下只能有一个客户端

用线程池可以有多个客户端连接,但是非常消耗性能。因为每次来一个连接就回去专门新建一个线程去处理。虽然

newCachedThreadPool()所创建的线程可以在一定时间内回收已经空闲的线程,但是在高并发情况下,仍然会因为创建太多的线程而撑爆内存。

代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class OioServer {public static void main(String[] args) throws IOException {ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();// 创建socket服务,监听10101端口ServerSocket server = null;try {server = new ServerSocket(10101);} catch (IOException e) {e.printStackTrace();}System.out.println("服务器启动!");while (true) {final Socket socket = server.accept();System.out.println("来了一个新的客户端!");newCachedThreadPool.execute(new Runnable() {@Overridepublic void run() {// 业务处理handler(socket);}});}}public static void handler(Socket socket) {try {byte[] bytes = new byte[1024];InputStream inputStream = socket.getInputStream();while (true) {//读取数据(堵塞)int read = inputStream.read(bytes);if (read != -1) {System.out.println(new String(bytes, 0, read));} else {break;}}} catch (Exception e) {e.printStackTrace();} finally {try {System.out.println("socket 关闭");socket.close();} catch (IOException e) {e.printStackTrace();}}}}

测试的话,你可以进windows的cmd命令创建敲以下命令:

[C:\~]$ telnet 127.0.0.1 10101Connecting to 127.0.0.1:10101...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
qsadasdasdda
f
asd
dfg
fgh
fghgf
hgfh
gfh

对应的java控制台会输出信息

java socket demo及其缺点相关推荐

  1. java socket实现的简易的聊天工具demo

    这是一个使用原生java socket实现的简易的聊天工具demo, 界面使用java swing 界面如下: ---------- 项目目录结构 代码: https://gitee.com/kunl ...

  2. Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...

    此人博客挺好的,推荐一个! 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实 ...

  3. Java Socket传输数据的文件系统介绍

    转自:http://developer.51cto.com/art/201003/189963.htm Java Socket传输数据在进行的时候有很多的事情需要我们不断的进行有关代码的学习.只有不断 ...

  4. Java Socket编程 - 基于TCP方式的二进制文件传输

    一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1. ...

  5. 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)

    最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...

  6. java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用

    /*** SimpleHttpServer.java*/importjava.io.*;importjava.net.*;importjava.util.StringTokenizer;/*** 一个 ...

  7. java socket 重连复用_Java Socket编程基础及深入讲解(示例代码)

    Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要讲解Socket的基础编程.Socket用在哪呢,主要用在进程间,网络间通信.本篇比较长,特别做了个目录: 一.Socket通信基 ...

  8. Java Socket实现客户端服务端之间的通信

    Java Socket Java Socket编程用于在不同JRE上运行的应用程序之间的通信. Java Socket编程可以是面向连接的或无连接的. Socket和ServerSocket类用于面向 ...

  9. 实现服务器和客户端数据交互,Java Socket有妙招

    摘要:在Java SDK中,对于Socket原生提供了支持,它分为ServerSocket和Socket. 本文分享自华为云社区<Java Socket 如何实现服务器和客户端数据交互>, ...

最新文章

  1. Adobe Auditon使用功能(一):将音频文件切分成多段,并将每段音频分别保存到不同的文件中
  2. 《一只孤独的船》莱蒙托夫
  3. MATLAB移植C的小结
  4. VTK:可视化算法之CarotidFlow
  5. 走进武汉,解密多媒体开发新场景、新实践(内附资料下载)
  6. Json 时间 转换为 Javascript 时间 Date Jquery 调用WCF
  7. mysql5717开发设置怎么调回来_华为手机这几个默认设置,一定要关闭,再也不卡顿...
  8. vista下载_Vista和视图在游戏设计中的功能
  9. 话里话外:流程图绘制初级:六大常见错误
  10. Python学习4 列表基础知识和常用函数
  11. app 侧边栏 html,响应式手机App样式隐藏侧边栏特效插件
  12. BZOJ_1629_[Usaco2007_Demo]_Cow_Acrobats_(贪心)
  13. 啥是数据湖?老子(zǐ)告诉你 | 凌云时刻
  14. 取整运算⌊a⌋, ⌈a⌉的一些数学理论的总结
  15. Web入门之VScode连接数据库sql server(超详细)
  16. “国防七子”经费暴增,清华再增45亿,甩第二名101亿 |全国高校2022预算大公开...
  17. android实现语音聊天功能,为实现Android语音聊天室开发,语音聊天室软件源码该如何搭建...
  18. 基于Django 文档1.11 自解+补完 学习django ---part1
  19. 【Datawhale数据可视化组队学习】Task05 - 样式色彩秀芳华
  20. 台式计算机 主控芯片型号,win10系统查看U盘的主控芯片型号的图文方法

热门文章

  1. IPv4与IPv6区别
  2. 计算机组成原理知识点2
  3. 最大子序列和问题(动态规划)
  4. 【MATLAB】Matlab删除文件或者文件
  5. 隐马尔科夫链(HMM)
  6. 使用gpu服务器搭建人脸识别系统,基于GPU的大规模人脸识别系统的设计与实现
  7. Java岗面试:java技术面试问题
  8. qt中添加背景图片(stylesheet)
  9. html怎么给段落设置背景色,css的(文字、背景、段落)样式
  10. 定义一个类,并且在测试类中使用