TCP/IP模式是一种层次结构,共分为四层,分别为应用层、传输层、互联网层和主机到网络层。

在TCP/IP协议栈中,有两个高级协议是网络应用程序编写者应该了解的,即“传输控制协议”(TCP)与“用户数据报协议”(UDP)。

TCP协议是一种以固接连线为基础的协议,它提供两台计算机间可靠的数据传送。TCP可以保证数据从一端送至连接的另一端时能够确实送达,而且抵达的数据的排列顺序和送出时的顺序相同,因此TCP协议适合可靠性要求比较高的场合。

UDP是无连接通信协议,不保证可靠数据的传输,但能够向若干的目标发送数据,接收发自若干个源的数据。UDP是以独立发送数据包的方式进行。这种方式就像邮递员送信给收信人,可以寄出很多信给同一个人,而每一封信都是相对独立的,各封信送达的顺序并非重要,而收信人接收信件的顺序也不能保证与寄出信件的顺序相同。

UDP协议适合于一些对数据准确性要求不高的场合。

注意:一些防火墙和路由器会设置成不允许UDP数据包传输,因此若遇到UDP连接方面的问题,应先确定是否允许UDP协议。

通常0~1023之间的端口数用于一些知名的网络服务和应用,用户的普遍网络应用程序应该使用1024以上的端口数以避免端口号与另一个应用或系统服务所用端口冲突。

网络程序中套接字(Socket)用于将应用程序与端口连接起来。套接字是一个假想的连接装置,就像插插头的设备插座,用于连接电器与电线。Java将套接字抽象化为类,程序设计者只需创建Socket类对象,即可使用套接字。

TCP网络程序设计

是指利用Scoket类编写通信程序。利用TCP协议进行通信的两个应用程序是有主次之分的,一个称为服务器程序,另一个称为客户机程序。服务器端与客户端的交互过程如图所示:

InetAddress类

注意:InetAddress类的方法会抛出UnknownHostException异常,所以必须进行异常处理。这个异常在主机不存在或网络连接错误时发生。

ServerSocket类

注意:accept()方法会阻塞线程的继续执行,直到接收到客户的呼叫。如果没有客户呼叫服务器,那么下面的代码“System.out.println(“连接中”)”将不会执行。如果没有客户请求的情况下accept()方法没有发生阻塞,则一定是程序出现了问题,这种问题通常是使用了一个还在被其他程序占用的端口号,ServerSocket绑定没有成功。

UDP程序设计基础

注意:使用DatagramSocket类的receive()方法接收数据时,如果还没有可以接收的数据,在正常情况下receive()方法将阻塞,一直等到网络上有数据到来才接收该数据并返回。如果网络上没有数据发送过来,receive()方法也没有阻塞,肯定是程序有问题,大多数是使用了一个被其他程序占用的端口号。

DatagramPacket类

DatagramSocket类

Java笔记(第六篇-网络通信)的更多相关文章

  1. 从.Net到Java学习第六篇——SpringBoot+mongodb&Thymeleaf&模型验证

    SpringBoot系列目录 SpringBoot整合mongodb MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.如果你没用过Mong ...

  2. Java学习第六篇:集合类

    一.Java集合类框架 Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合:从Java5以后,J ...

  3. java核心技术第六篇之断言、日志、包装类型和工具类

    JDK1.5新特性: 1.自动拆装箱. 2.泛型 3.可变参数 4.静态导入 5.增强for循环 6.互斥锁 7.枚举 8.注解 JDK1.6新特性: 1.Desktop类和SystemTray类 2 ...

  4. Effective java笔记(六),方法

    38.检查参数的有效性 绝大多数方法和构造器对于传递给它们的参数值都会有限制.如,对象引用不能为null,数组索引有范围限制等.应该在文档中指明所有这些限制,并在方法的开头处检查参数,以强制施加这些限 ...

  5. c#开发Mongo笔记第六篇

    之前写的五篇比较得到了大家的积极反馈,也有个别高手对我写我写出的代码进行了指教. 其中提到的我写的查询方法性能有问题,我想了想,如果mongo不是延时加载的话,那我的查询就真的有问题了,就成了查询出来 ...

  6. MyCat 学习笔记 第六篇.数据分片 之 按月数据分片

    1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...

  7. 学习java随笔第六篇:数组

    一维数组 创建一维数组并输出 public class OneDimensionalArray { public static void main(String argas[]) { int i[]= ...

  8. [Python笔记]第六篇:文件处理

    本篇主要内容:open文件处理函数的使用 open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打 ...

  9. Java系列--第六篇 基于Maven的SSME之多国语言实现

    如果你的网站足够强大,以致冲出了国门,走向了国际的话,你就需要考虑做多国语言了,不过,未雨绸缪,向来是我辈程序人员的优秀品质,谁知道那天,我们的网站被国外大公司看中收购,从而飞上枝头变凤凰.不扯这么多 ...

随机推荐

  1. bootstrap基础学习【排版】(一)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. 【青橙商城-管理后台开发】3. web模块搭建

    [青橙商城-管理后台开发]3. web模块搭建 1.创建qingcheng_web_manager模块 pom.xml <?xml version="1.0" encodin ...

  3. JDBCtemplete 模板

    package com.augmentum.oes.common; import java.sql.Connection; import java.sql.PreparedStatement; imp ...

  4. Codeforces Round #590 (Div. 3) Editorial

    Codeforces Round #590 (Div. 3) Editorial 题目链接 官方题解 不要因为走得太远,就忘记为什么出发! Problem A 题目大意:商店有n件商品,每件商品有不同 ...

  5. WMIC命令的利用技巧

    WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批命令脚本执行系统管理的支持.在WMIC出现之前,如果要管理WM ...

  6. php 压缩接口

    function rtnJson($obj) { if (!headers_sent() && // 如果页面头部信息还没有输出 extension_loaded("zlib ...

  7. C++遍历文件夹

    struct _finddata_t { unsigned attrib; //文件属性 time_t time_create; //文件创建时间 time_t time_access; //文件上一 ...

  8. 题解 P3369 【【模板】普通平衡树(Treap/SBT)】

    STL真是个好东西. 最近在看pb_ds库及vector和set的用法,就想用这三种操作来实现一下普通平衡树,结果pb_ds中的rbtree不支持重复值,而本蒟蒻也看不懂不懂各大佬用pb_ds的实现, ...

  9. 基于SDP的提议/应答(offer/answer)模型简介

    1.引入 在松耦合会议中,会话参数完全由会议创建者来确定,参与者能做的仅仅是根据这些会话参数来加入会议(当然也可以选择不加入).这种情况下,主要要做的就是会话描述,在这里SDP本身就足够了. 但是在更 ...

  10. 很low的四位验证码实现

    <html> <head> <meta charset="utf-8"> </head> <body> <inpu ...