一、软件结构

  C/S 结构:全称为 Client/Server 结构,是指客户端和服务器结构。常见的程序有微信,QQ,迅雷等软件。

  

  B/S 结构:全称 Brower/Server 结构,是指浏览器和服务器结构,常见的浏览器有谷歌,火狐,IE 等。

  

  以上两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。

二、网络通信协议

  网络通信协议

    通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这些协议好比交通规则一样。

    协议中对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换。

  TCP/IP 协议

    传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol ),是 Internet 最基本、最广泛的协议。

    它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准,它的内部包含一系列的用于处理数据通信的协议,并采用了四层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

  

三、协议分类

  通信的协议还是比较复杂的,java.net 包中包含的类和接口,它们提供层次的通信细节。可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节。

  java.net 包中提供了两种常见的网络协议的支持:

    TCP

      传输控制协议 (Transmission Control Protocol)。

      TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。

      三次握手: TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠

      • 第一次握手:客户端向服务器端发出连接请求,等待服务器确认。
      • 第二次握手:服务器端向客户端回送一个响应,通知客户端收到了连接请求
      • 第三次握手:客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示

       

      完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可
以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

    UDP

      用户数据报协议(User Datagram Protocol)。UDP协议是一个面向无连接的协议。

      传输数据时,不需要建立连接,不管对方端服务是否启动,直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应用中,例如视频会议、QQ聊天等。

四、网络编程三要素

  1、协议

     协议:计算机网络通信必须遵守的规则。

  2、IP地址

     IP地址:指互联网协议地址(Internet Protocol Address ),俗称IP。

     IP地址用来给一个网络中的计算机设置做唯一的编号。

     IP 地址分类:

      •  IPv4:是一个32位的二进制数,通常被分为4个字节,表示成 a.b.c.d 的形式,例如 192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示42亿个。
      • IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。有资料显示,全球IPv4地址在2011年2月分配完毕。

      为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进 制数,表示成 ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 ,号称可以为全世界的每一粒沙子编上一个网
址,这样就解决了网络地址资源数量不够的问题。

     常用命令

      ① 查看本机 IP 地址,在控制台输入:

ipconfig

      ② 检查网络是否连通,在控制台输入:

ping 空格 IP地址
ing 220.181.57.216

     特殊的 IP 地址

      本机IP地址:127.0.0.1、localhost 。

  3、端口号

    网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?

    如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。

    端口号:用两个字节表示的整数,它的取值范围是 0~65535。其中,0-1023 之间的端口号用于一些知名的服务和应用。,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会
导致当前程序启动失败。

      利用 协议 + IP地址 + 端口号 三元组合,就可以标识网络中的进程了,那么进程间的通信就可以利用这个标识与其
它进程进行交互。

    

Java 之 网络编程基础的更多相关文章

  1. JAVA的网络编程基础概念

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...

  2. Java NIO 网络编程基础

    Java NIO提供了一套网络api,可以用来处理连接数很多的情况.他的基本思想就是用一个线程来处理多个channel. 123456789101112131415161718192021222324 ...

  3. 【Java基础】Java网络编程基础知识

    什么是网络编程 网络编程是通过使用套接字来达到进程间通信目的,那什么是套接字呢?其实套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的 ...

  4. Java网络编程基础(Netty预备知识)

    今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...

  5. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

  6. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

  7. java网络编程基础——网络基础

    java网络编程 网络编程基础 1.常用的网络拓扑结构: 星型网络.总线网络.环线网络.树形网络.星型环线网络 2.通信协议的组成 通信协议通常由3部分组成: 语义部分:用于决定通信双方对话类型 语法 ...

  8. JAVA的网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  9. iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...

随机推荐

  1. 使用.whl文件安装torch和pytorch的方法

    当使用pip install torch torchvision命令下载感觉很慢时 可以先到下面的网页将.whl文件下载下来,然后再运行安装即可: torchvision也是 下载好了以后,运行: p ...

  2. html两端对齐的代码

    html语言两端对齐的代码为: <p style="text-align:justify; text-justify:inter-ideograph;"> 文字,需要对 ...

  3. osgearth 编译日志

    1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake does n ...

  4. Python高级笔记(八)with、上下文管理器

    1. 上下文管理器 __enter__()方法返回资源对象,__exit__()方法处理一些清除资源 如:系统资源:文件.数据库链接.Socket等这些资源执行完业务逻辑之后,必须要关闭资源 #!/u ...

  5. ABAP DEMO33 选择周的搜索帮助

    效果图 *&---------------------------------------------------------------------**& Report YCX_02 ...

  6. 【Leetcode_easy】860. Lemonade Change

    problem 860. Lemonade Change solution class Solution { public: bool lemonadeChange(vector<int> ...

  7. egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名

    egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...

  8. React:快速上手(8)——前后端分离的跨域访问与会话保持

    React:快速上手(8)——前后端分离的跨域访问与会话保持 跨域访问 跨域是指从一个域名的网页去请求另一个域名的资源.比如从http://www.baidu.com/ 页面去请求http://www ...

  9. pod 常用指令

    //只安装新增的库,已经安装的库不更新 pod install --verbose --no-repo-update //只更新指定库名的第三个库,其他库不更新 pod update 库名 --ver ...

  10. mysql备份时过滤掉某些库 以及 去掉"Warning: Using a password on the command line interface can be insecure."提示信息

    在对mysql进行完整备份时使用--all-database参数 # mysqldump -u root -h localhost -p --all-database > /root/all.s ...