Java网络基础
本来主要是讲自己在网络编程方面的学习总结,里面主要讲计算网络的基础、TCP的通信协议,还有些简单的案例。下面是我学习的一个简单路线,

一、概述
计算机网络是将不同地理位置的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。在Java语言当中,为计算网络提供了很多支持,通过很多类和接口可以很方便的进行通信和交流。
二、网络编程入门
2.1 软件结构
1、B\S结构:全称为Browser/Server结构,指客户端和服务器结构。常见的程序有微信,QQ等软件。
2、C\S结构:全称为Client/Server结构,指客户端和服务器结构。常见程序有QQ。迅雷等软件。
2.2 网络通信协议
通过计算机网络可以使多台计算机实现连接,位于同一个网络种的计算机在进行连接和通信时需要遵守一定的规则,这就好比每个学生在学校里要遵守校规校法一样,在计算机网络当中,这些连接和通信的规则被称为网络通信协议,他对数据的传输格式,传输效率,传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换
2.3 TCP/IP协议
传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol),是Internet最基本,最广泛的协议。他定义了计算机如何连入因特网,以及数据如何在他们之间的传输标准。他的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫他的下一层所提供的协议来完成自己的需求

2.4 协议分类
1、UDP:用户数据报协议(User Datagram Protocol)。UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确定接收端是否存在,就会发出数据,同样接收端在收到数据市,也不会向发送端反馈是否收到数据
2、TCP:传输控制协议(Transmission Control Protocol)。TCP协议是面向连接协议,即传输数据之前,在发送端和接收端建立连接,然后在传输数据,他提供了两台计算机之间的安全可靠的数据传输,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接时必须要明确客户端和服务器,由客户端向服务器发出连接请求,每次连接的创建都要经过“三次握手”。
2.5 网络编程的三要素
1、第一次握手,客户端向服务器发送连接请求,等待服务器确定
2、第二次握手,服务器向客户端回送一个连接响应,通知客户端收到了连接请求
3、第三次握手,客户端再次向服务器发送确定信息,确认连接

三、TCP的通信程序
3.1 概述
1、TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分客户端(Client)与服务器(Server)。当两个程序需要通信时,他们可以通过Socket类创建的套接字对象并连在一起(端口号和IP地址的组合得到一个网络套接字)。
2、通信步骤:服务器需要事先启动,等待客户端的连接。客户端主动连接服务器端,连接成功才能通信,服务器不能主动连接客户端。
3、在Java程序当中,实现TCP通信程序。客户端:java.net.Socket类表示。创建Socket对象,向服务器请求连接,服务器响应请求,两者进行连接,开始通信。服务器:java.net.ServerSocket类表示,创建ServerSocket对象,相当于开启了一个服务区,并等待客户端连接。
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8888);
//创建Socket对象
}
}3.2 ServerSocket类
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
//创建ServerSocket套接字对象
Socket socket = server.accept();
//返回一个和客户端相连接的Socket对象
}
}3.3 网络通信程序
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8888);
//创建Socket对象
OutputStream os = socket.getOutputStream();
//获得输出流,向服务器发送信息
os.write("请求服务的的连接".getBytes());
//向服务器发送请求连接
InputStream is = socket.getInputStream();
//获取输入流,从服务器读取信息
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes,0,len));
os.close();
is.close();
socket.close();
}
} public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
//创建ServerSocket套接字对象
Socket socket = server.accept();
//返回一个和客户端相连接的Socket对象
InputStream is = socket.getInputStream();
//创建输入流从客户端读取信息
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes,0,len));
//打印信息
OutputStream os = socket.getOutputStream();
os.write("允许连接".getBytes());
os.close();
is.close();
socket.close();
server.close();
}
}
2.4 协议分类
1、UDP:用户数据报协议(User Datagram Protocol)。UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接,简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确定接收端是否存在,就会发出数据,同样接收端在收到数据市,也不会向发送端反馈是否收到数据
2、TCP:传输控制协议(Transmission Control Protocol)。TCP协议是面向连接协议,即传输数据之前,在发送端和接收端建立连接,然后在传输数据,他提供了两台计算机之间的安全可靠的数据传输,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接时必须要明确客户端和服务器,由客户端向服务器发出连接请求,每次连接的创建都要经过“三次握手”。
2.5 网络编程的三要素
1、第一次握手,客户端向服务器发送连接请求,等待服务器确定
2、第二次握手,服务器向客户端回送一个连接响应,通知客户端收到了连接请求
3、第三次握手,客户端再次向服务器发送确定信息,确认连接
Java网络基础的更多相关文章
- java网络基础知识的简述
TCP/UDP的介绍 TCP协议:面向连接的,字节流无差错地传输协议. UDP协议:一个不可靠的无连接的数据传输协议. 说明:TCP可以想象成电话通讯,双方在通话时必须建立连接,一方没听清,会要求对方 ...
- Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
本文转载 https://www.javadoop.com 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.c ...
- Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
本文转自:http://www.sohu.com/a/203838233_827544 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 ht ...
- Java网络编程与NIO详解2:JAVA NIO 一步步构建IO多路复用的请求模型
本文转载自:https://github.com/jasonGeng88/blog 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 http ...
- java 网络编程(三)---TCP的基础级示例
下面是TCP java网络编程的基础示例: tcp传输:客户端建立过程的思路:1.创建TCP客户端的Socket服务,使用的是socket对象,建议在创建的过程中,就明确了目的地和要连接的主机2.如果 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- Java 网络编程(一) 网络基础知识
链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951826.html 网络基础知识 网络编程的目的:直接或间接地通过网络协议与其他计算机 ...
- Java网络编程基础(Netty预备知识)
今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...
- java网络爬虫基础学习(三)
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
随机推荐
- [leetcode]543. Diameter of Binary Tree二叉树的直径
题目中的直径定义为: 任意两个节点的最远距离 没想出来,看的答案 思路是:diameter = max(左子树diameter,右子树diameter,(左子树深度+右子树深度+1)) 遍历并更新结果 ...
- libzip开发笔记(一):libzip库介绍、编译和工程模板
前言 Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库. libzip libzip是一个C库,用于读取,创建和修改zip档案.可以从数 ...
- JAVA Executor(线程池)框架
一.Executor概述 为更好控制线程,jdk提供一套线程管理框架Executor,帮助开发人员有效地进行线程控制.它们都位于java.util.concurrent包中,是jdk并发包的核心.其中 ...
- WEB安全讨论-表单登录是先验证验证码还是密码
表单登录是先验证验证码还是密码? 肯定是验证码呀!!!这是毋庸置疑的.但是发现有人会验证密码,感觉先验证密码和先验证验证码是一个概念是一样的.但是其实是完全不一样的.下面我们来一起详细的剖析一下: 消 ...
- Flutter 基础组件:状态管理
前言 一个永恒的主题,"状态(State)管理",无论是在React/Vue(两者都是支持响应式编程的Web开发框架)还是Flutter中,他们讨论的问题和解决的思想都是一致的. ...
- 一条查询SQl是怎样执行的
MySQL的逻辑架构图 大体来说,MySQL可以分为Server层和存储引擎层两部分. Server层包括连接器.查询缓存.分析器,优化器等,涵盖MySQL的大多核心服务功能,以及所有的内置函数,存储 ...
- SonarQube学习(六)- SonarQube之扫描报告解析
登录http://192.16.1.105:9000,加载项目扫描情况 点击项目名称,查看报告总览 开发人员主要关注为[问题]标签页. 类型 主要关注为bug和漏洞. 其中bug是必须要修复的,漏洞是 ...
- 机器学习1-sklearn&字典特征抽取
sklearn数据集 数据集API介绍 sklearn.datasets 加载获取流行数据集 datasets.load_*() 获取小规模数据集,数据包含在datasets里 datasets.fe ...
- SDUST数据结构 - chap7 图
判断题: 选择题: 函数题: 6-1 邻接矩阵存储图的深度优先遍历: 裁判测试程序样例: #include <stdio.h> typedef enum {false, true} boo ...
- Pandas应用案例-股票分析:使用tushare包获取股票的历史行情数据进行数据分析
目标: 使用tushare包获取股票的历史行情数据 输出该股票所有收盘比开盘上涨3%以上的日期 输出该股票所有开盘比前日收盘跌幅超过2%以上的日期 假如为我们从2010年1月1日开始,每月第一个交易日 ...