当前位置: 首页 > news >正文

大龄屌丝自学笔记--Java零基础到菜鸟--038

网络模型、要素,Socket,UDP,TCP

 

1、网络模型

OSI:Open System Interconnectopn,开放系统互连。

    【物理层】-【数据链路层】-【网络层】-【传输层】-【会话层】-【表示层】-【应用层】

TCP/IP:

    【主机至网络层】-----------【网际层】-【传输层】-【应用层】

 

 

2、要素

网络编程三要素:IP地址,端口,协议。

UDP协议:数据打包不建立连接,数据有限制,效率高,不可靠。(类似发短信)

TCP协议:建立数据通道,数据无限制,效率低,可靠。(类似打电话)

InetAddress类(IP地址对象类)

 

3、Socket

Socket套接字:网络上具有唯一标识的IP地址和端口号组合在一起,构成唯一能被识别的标识符套接字。

Socket原理机制:通信两端都有Socket对象,且所有通信都是通过Socket间的IO流进行操作。

 

4、UDP

接收:【创建UDP接收端Socket对象】-【创建用于接收数据的数据包】-【接收数据】-【解析数据包】-【释放资源】

发送:【创建UDP发送端Socket对象】-【创建数据并打包】-【发送数据】-【释放资源】

 

DatagramSocket类,DatagramPacket类

 1 //接收
 2 DatagramSocket ds = new DatagramSocket(10086);  //创建接收端Socket对象
 3 byte[] bys = new byte[1024];  //创建数据
 4 int length = bys.length;  //长度
 5 DatagramPacket dp = new DatagramPacket(bys,length)  //用于接受数据的数据包(容器)
 6 ds.receive(dp);  //接收数据
 7 byte[] bys2 = dp.getData();  //解析数据
 8 System.out.println(new String(bys2,0,bys2.length));  //输出
 9 ds.close();  //释放资源
10 
11 //发送
12 DatagramSocket ds = new DatagramSocket();  //创建发送端Socket对象
13 byte[] bys = "Hello World".getBytes();  //创建数据
14 int length = bys.length;  //长度
15 InetAddress address = InetAddress.getByName("192.168.12.34");  //IP地址
16 int port = 10086;  //端口
17 DatagramPacket dp = new DatagramPacket(bys,length,address,port)  //数据打包
18 ds.send(dp);  //发送数据
19 ds.close();  //释放资源

 

5、TCP

接收:【创建TCP服务端Socket对象】-【监听客户端连接】-【获取输入流,读数据】-【释放资源】

发送:【创建TCP客户端Socket对象】-【获取输出流,写数据】-【释放资源】

 

Socket类,ServerSocket类

 1 //接收
 2 ServerSocket ss = new ServerSocket(8888);  //创建服务端Socket对象
 3 Socket s = ss.accept();  //监听
 4 InputStream is = new s.getInputStream();  //输入流
 5 byte[] bys = new byte[1024];  //创建数据
 6 int len = is.read(bys);  //长度
 7 String str = new String(bys,0,len);  //读数据
 8 System.out.println(str);  //输出
 9 s.close();  //释放资源
10 
11 //发送
12 InetAddress address = new InetAddress.getByName("192.168.12.34"); //IP地址
13 int port = 8888;  //端口
14 Socket s = new Socket(address,port);  //创建客户端Socket对象
15 OutputStream os = new s.getOutputStream();  //输出流
16 os.write("Hello World".getBytes());  //写数据
17 s.close();  //释放资源

 

转载于:https://www.cnblogs.com/liverpool/p/4918311.html

相关文章:

  • VMWare虚拟机提示:锁定文件失败,打不开磁盘的解决办法
  • HDU2030 汉字统计
  • Windows下删除不需要的服务
  • [原创] SQLite数据库使用清单(下)
  • Oracle11g安装详细步骤【有图在里边哦】
  • Myeclipse链接Oracle等数据库时lo exception: The Network Adapter could not establish the connection
  • taglib的使用
  • Oracle解锁封锁的账号
  • 期中总结
  • Web应用解决中文乱码的两种方式
  • Linux平台下线程同步,实现“生产者消费者问题”
  • aaaa
  • Hibernate懒加载策略
  • [redis] Jedis 与 ShardedJedis 设计
  • Ubuntu中使用GCC编译器出现:没有那个文件或目录
  • 【css3】浏览器内核及其兼容性
  • 2017前端实习生面试总结
  • Apache Pulsar 2.1 重磅发布
  • canvas绘制圆角头像
  • crontab执行失败的多种原因
  • ES6系列(二)变量的解构赋值
  • Fastjson的基本使用方法大全
  • MYSQL 的 IF 函数
  • ng6--错误信息小结(持续更新)
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 电商搜索引擎的架构设计和性能优化
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 使用Gradle第一次构建Java程序
  • 数据仓库的几种建模方法
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 在Unity中实现一个简单的消息管理器
  • 你对linux中grep命令知道多少?
  • 2017年360最后一道编程题
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (floyd+补集) poj 3275
  • (js)循环条件满足时终止循环
  • (转)scrum常见工具列表
  • (转)VC++中ondraw在什么时候调用的
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .libPaths()设置包加载目录
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net中生成excel后调整宽度
  • ?.的用法
  • [ IO.File ] FileSystemWatcher
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [APIO2012] 派遣 dispatching
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [Docker]六.Docker自动部署nodejs以及golang项目