[Java]Socket和ServerSocket学习笔记
对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求。这会,Socket对于我们来说就非常实用了。下面是本次学习的笔记。主要分异常类型、交互原理、Socket、ServerSocket、多线程这几个方面阐述。
Socket()
boolean isConnection=socket.isConnected() && !socket.isClosed(); //判断当前是否处于连接
- 自定义标识符(譬如下面的例子,当受到“bye”字符串的时候,关闭Socket)
- 告知读取长度(有些自定义协议的,固定前几个字节表示读取的长度的)
- 读完所有数据
- 当Socket调用close的时候关闭的时候,关闭其输入输出流
public void service(){while(true){Socket socket=null;try{socket=serverSocket.accept();//从连接队列中取出一个连接,如果没有则等待System.out.println("新增连接:"+socket.getInetAddress()+":"+socket.getPort());...//接收和发送数据}catch(IOException e){e.printStackTrace();}finally{try{if(socket!=null) socket.close();//与一个客户端通信结束后,要关闭Socket}catch(IOException e){e.printStackTrace();}}} }
- 主线程会循环执行ServerSocket.accept();
- 当拿到客户端连接请求的时候,就会将Socket对象传递给多线程,让多线程去执行具体的操作;
public void service(){while(true){Socket socket=null;try{socket=serverSocket.accept(); //主线程获取客户端连接Thread workThread=new Thread(new Handler(socket)); //创建线程workThread.start(); //启动线程}catch(Exception e){e.printStackTrace();}} }
class Handler implements Runnable{private Socket socket;public Handler(Socket socket){this.socket=socket;}public void run(){try{System.out.println("新连接:"+socket.getInetAddress()+":"+socket.getPort());Thread.sleep(10000);}catch(Exception e){e.printStackTrace();}finally{try{System.out.println("关闭连接:"+socket.getInetAddress()+":"+socket.getPort());if(socket!=null)socket.close();}catch(IOException e){e.printStackTrace();}}} }
当然是先多线程还有其它的方式,譬如线程池,或者JVM自带的线程池都可以。这里就不说明了。
[Java]Socket和ServerSocket学习笔记相关推荐
- JAVA基础与高级学习笔记
JAVA基础与高级学习笔记 /记录java基础与高级,除了较简单的内容,没有必要记录的没有记录外,其余的都记录了/ java初学者看这一篇就够了,全文 6万+ 字. JAVA基础 java会出现内存溢 ...
- 零基础学习Java开发,这些学习笔记送给你
因为Java具备很多特点,并且在企业中被广泛应用为此很多小伙伴选择学习Java基础开发,但是零基础学习Java技术开发需要我们制定Java学习路线图对于我们之后的学习会非常有帮助. 零基础学习Java ...
- Java 8 函数式编程学习笔记
Java 8 函数式编程学习笔记 @(JAVASE)[java8, 函数式编程, lambda] Java 8 函数式编程学习笔记 参考内容 Java 8中重要的函数接口 扩展函数接口 常用的流操作 ...
- 【Java】函数式编程学习笔记——Stream流
学习视频:https://www.bilibili.com/video/BV1Gh41187uR?p=1 (1)[Java]函数式编程学习笔记--Lambda表达式 (2)[Java]函数式编程学习笔 ...
- java 编程思想 多线程学习笔记
java 编程思想 多线程学习笔记 一.如何创建多线程? 1.继承 java.lang.Thread 类 2.实现 java.lang.Runnable 接口 3.Callable接口 总之,在任何线 ...
- 第10课:底实战详解使用Java开发Spark程序学习笔记
第10课:底实战详解使用Java开发Spark程序学习笔记 本期内容: 1. 为什么要使用Java? 2. 使用Java开发Spark实战 3. 使用Java开发Spark的Local和Cluster ...
- Java并发编程艺术学习笔记(五)
Java并发编程艺术学习笔记(五) Java并发容器和框架 Java为开发者也提供了许多开发容器和框架,可以从每节的原理分析来学习其中精妙的并发程序. 一.ConcurrentHashMap的实现原理 ...
- 《Java编程思想》学习笔记【一对象导论】
重头学习Java,大一没怎么学,大二上课也没听.(流下不学无术的眼泪) 所有编程语言都提供抽象机制,我们所能解决的问题的复杂性直接取决于抽象的类型和质量. 汇编语言是对底层机器的轻微抽象," ...
- Java之GUI编程学习笔记六 —— AWT相关(画笔paint、鼠标监听事件、模拟画图工具)
Java之GUI编程学习笔记六 -- AWT相关(画笔paint) 参考教程B站狂神https://www.bilibili.com/video/BV1DJ411B75F 了解paint Frame自 ...
最新文章
- 第五周项目一-三角形类雏形(5)
- linux 编写完程序吗,linux下编写C++程序
- FreeTextBox 3.1.6 的实践总结和几个问题
- 有函数就可以实现面向对象
- python输出字符_python输出字符
- MySQL命令行客户端(一)客户端选项
- 树莓派 使用xbox360手柄
- C++之文件批量改名
- tensorflow2.X tf.data.Dataset详解
- java resource文件_利用java如何实现读取resource目录下文件
- Proteus 8 Professional安装教程
- 2019年,IT行业发展前景
- 设计实现信用卡用户定时还款功能
- android微信怎么建群,微信群空间是什么?如何创建微信群空间?
- 设备树学习(四、内核head.S对uboot传参的处理)
- iOS学习—让View从下面弹出
- Rabbitmq 和erlang 安装成功但是网面访问不了
- 字节跳动技术中台前端日常实习一面 21/11/19
- kabeja导出DXF为其他格式
- ubtunu打开firefox_虚拟机Ubuntu下安装Firefox浏览器
热门文章
- Linux下的字符界面扫雷游戏
- Spring源码学习笔记:经典设计模式之代理模式
- [Java] 蓝桥杯ALGO-13 算法训练 拦截导弹
- [Python] L1-018. 大笨钟-PAT团体程序设计天梯赛GPLT
- 1085. Perfect Sequence (25)-PAT甲级真题
- 创建对象、原型、原型链
- 简单易用的APP制作软件,KM盒子V6.3版发布
- css3——新盒子定义box-sizing
- Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 2 部分
- 在jquery的ajax方法中的success中使用return要注意的问题