网络通信三要素:

A:IP地址

计算机在网络中的唯一标识。
现在使用的是:"点分十进制"
B:端口
应用程序的的标记。
C:协议

通信的规则。

网络通信其实就是Socket间的通信,Socket(套接字)就是为网络服务提供的一种机制,通信的两端都有Socket,数据在两个Socket间通过IO传输。

只要是网络传输,必须有Socket;

传输分为UDP传输和TCP传输:

两者区别:

UDP:不建立连接,数据打包传输,数据有限制,数据不可靠,速度快。

TCP:建立连接,数据无限制,数据可靠,速度慢。

UDP传输:

在java中,无法直接操作UDP,需将UDP封装成对象,这个对象就是DatagramSocket 封装了udp传输协议的socket对象。

UDP传输的数据都存放到数据包中,数据包中包括目的地址、端口、数据等信息。数据包对应的对象是DatagramPacket,通过这个对象中的方法,就可以获取到数据包中的各种信息。

在进行UDP传输时,需要在DatagramSocket 明确一个是发送端,一个是接收端;

发送端

import java.net.*;
class  UdpSend{public static void main(String[] args)throws Exception {// 1.建立udp的socket服务。创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。DatagramSocket ds = new DatagramSocket(8888);//指定发送端口,不指定系统会随机分配。// 2.明确要发送的具体数据。String text = "udp传输";byte[] buf = text.getBytes();//3.将数据封装成了数据包。DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.69"),10000);//  4.用socket服务的send方法将数据包发送出去。ds.send(dp);// 5.关闭资源。

ds.close();}}

接收端

class UdpRece {public static void main(String[] args) throws Exception{//1.创建udp的socket服务。必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。DatagramSocket ds = new DatagramSocket(10000);//2.定义数据包,用于存储接收到数据。先定义字节数组,数据包会把数据存储到字节数组中。byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);//3.通过socket服务的接收方法将收到的数据存储到数据包中。ds.receive(dp);//该方法是阻塞式方法。//4.通过数据包的方法获取数据包中的具体数据内容,比如ip,端口,数据等等。String ip = dp.getAddress().getHostAddress();int port = dp.getPort();String text = new String(dp.getData(),0,dp.getLength());//将字节数组中的有效部分转成字符串。//5.关闭资源。ds.close();}
}

TCP传输:

客户端(Socket)和服务端 (ServerSocket)建立连接,就产生传输数据的通道,这通道称为,而且是建立在网络基础上的流,称之为Socket流。该流中既有读取,也有写入;

TCP客户端:

class  TcpClient{public static void main(String[] args) throws Exception{//1.建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。Socket s = new Socket("192.168.1.69",30000);//2.如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,//只要通过getInputStream和getOutputStream就可以获取两个流对象。OutputStream out = s.getOutputStream();//获取了socket流中的输出流对象。out.write("tcp演示".getBytes());//3.关闭资源。s.close();}
}

TCP服务端:

class  TcpServer{public static void main(String[] args) throws Exception{//1.创建服务端socket服务,并监听一个端口。ServerSocket ss = new ServerSocket(30000);//建立服务端的socket服务//2.服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象。Socket s = ss.accept();//获取客户端对象String ip = s.getInetAddress().getHostAddress();// 3.可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。InputStream in = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流byte[] buf = new byte[1024];int len = in.read(buf);String text = new String(buf,0,len);System.out.println(text);// 4.如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。s.close();ss.close();}
}

谈谈对网络通信的理解相关推荐

  1. Java面试之谈谈对Volatile的理解

    谈谈对Volatile的理解 Volatile在日常的单线程环境是应用不到的 Volatile是Java虚拟机提供的轻量级的同步机制(三大特性) 保证可见性 不保证原子性 禁止指令重排 可能这么说,还 ...

  2. 谈谈对MVVM的理解

    谈谈对MVVM的理解 什么是MVVM 不管是MVC,MVP,或者MVVM,都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式 ...

  3. 谈谈对this的理解

    谈谈对this的理解 什么是this 每个函数在被调用时都会创建一个执行上下文,这个上下文包含了变量环境.this.作用域链等,this就是执行上下文中的一个属性,他是在函数运行时进行绑定的,this ...

  4. 什么是面向对象?谈谈对面向对象的理解?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.什么是面向对象?谈谈对面向对象的理解? 二.3大特征: 1.封装: 2.继承: 2.多态: 总结 一.什么是面向对象?谈 ...

  5. jvm对于java的意义_谈谈对JVM的理解

    JVM可谓是学习JAVA基础中的基础了,但仍有不少同学对JVM概念还是比较模糊,甚至没有听说过,对java的理解也只是在基础语法 层面,本文就将对JVM进行初步介绍,因篇幅所限,只能介绍JVM基础,如 ...

  6. 谈谈对springioc的理解

    https://www.cnblogs.com/xdp-gacl/p/4249939.html 转载 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概 ...

  7. 读Java核心技术36讲有感——谈谈对Java的理解,谈谈Exception和Error

    读过杨晓峰老师的36讲之后,想总结下自己的感想,写下来也有助于记忆,方便以后面试查阅和复习.题目所提到的话题本来是两讲,但是由于感想篇幅较短,所以合成一篇来写. 一.谈谈对Java平台的理解: 1.J ...

  8. 谈谈对python的理解_浅谈对python pandas中 inplace 参数的理解

    这篇文章主要介绍了对python pandas中 inplace 参数的理解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 pandas 中 inplace 参数在很多函数中都会有, ...

  9. 谈谈对MVC的理解(View+Model+Controller)

    1) 什么是MVC? MVC是一种设计思想,根据职责不同将程序中的组件分成以下3个部分. V(View视图):负责与用户交互.将数据展现,或者是接收数据 M(Model模型):负责业务处理.业务模型, ...

最新文章

  1. 不止摩尔定律,计算领域值得学习的定律还有哪些?
  2. 你好,C++(34)有一只叫做多利的羊 6.2.4 拷贝构造函数
  3. linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)
  4. SpringBoot+Redis+Cookies实现高并发的购物车
  5. 一、JAVA基础(数据类型、运算符、变量常量)
  6. JS学习笔记 - 面向对象 - 原型
  7. 嵌入式linux离线地图,基于gmap.net制作离线地图下载器
  8. 艾宾浩斯遗忘曲线-计划表30天
  9. 哈夫曼编码c语言例题,关于哈夫曼编码试题的计算
  10. 关系数据库理论:范式判断、函数依赖、无损分解、正则覆盖
  11. 商业变现永不眠(一) — 什么是决定商业化路径的底层逻辑?
  12. (附源码)springboot企业合同管理系统 毕业设计 161456
  13. ios项目编译错误:error: Multiple commands produce 'Faun.app/Assets.car'
  14. Android 微信支付配置流程
  15. 支付宝APP支付 ---服务器开发
  16. internal server error是什么意思?
  17. csdn 如何去掉图片水印
  18. 深圳LCD液晶屏生产厂家-深圳LCD液晶显示屏生产工厂
  19. 西门子HMI设备与V20变频器如何实现通讯?
  20. 手写小程序摇树优化工具(三)——遍历json文件

热门文章

  1. Romberg积分法(MATLAB)
  2. Excel如何合并多个列的数据并插入一些符号?
  3. OSTaskCreate 和 OSTaskCreateExt 函数
  4. android学习的app,Android相见恨晚的6款学习APP,每天坚持学习,提升自我
  5. 扫地机器人黑色耐脏吗_为何小米扫地机值得购买?新手必看米家小米扫地机器人评测...
  6. VS安装扩展缓慢问题解决
  7. 在Windows系统下安装VirtualBox与Ubuntu的详细教程
  8. 浅析 - 微信先享卡
  9. 盘点那些高考语录,总有一句惊呆你!
  10. Linux 操作系统原理 — Traffic Control 流量控制与 IP QoS 技术解析