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= ...
随机推荐
- 循序渐进VUE+Element 前端应用开发(30)--- ABP后端和Vue+Element前端结合的分页排序处理
在很多列表展示数据的场合中,大多数都会需要一个排序的处理,以方便快速查找排序所需的数据,本篇随笔介绍如何结合ABP后端和Vue+Element前端结合的分页排序处理过程. 1.Vue+Element前 ...
- 如何组织一场JAVA技能大练兵
近期,公司为了锻炼开发人员技能,举办了一场涵盖多个技术线的技能大练兵,我有幸受邀负责java技术方向的出题和评审工作.下面从以下几个方面回顾下整个过程: 题目设计 程序要求 测试方法 题目设计 题目设 ...
- TurtleBot3 Waffle (tx2版华夫)(4)笔记本与TX2的通信
4.1. 使用vnc控制华夫Turbot3-Tx2开发板 1) 电脑端安装vnc viewer,您可以选择应用商城下载安装即可: 2) 下载后打开,键入Turbot3的ip à回车à选择连接: 3) ...
- java内部类笔记
内部类 1. 普通内部类 <pre name="code" class="java">class className{ [private|pro ...
- GitHub基础使用指南
引言: 只要进行了一段时间的软件或者编程相关知识的学习,相信大家或多或少都会见过这只"猫猫",这可不是什么宠物店铺的商标,身为即将成为程序猿/媛的你,或者已经是一位程序猿/媛的你, ...
- 添加/删除/读写c盘文件——c#
一.前言: 有时候我们为自己的程序添加配置文件,如tet.ini.xml等文件,又或者保存软件运行时的日志 当我们把软件打包后,默认安装在c盘,而配置文件也会跟随生成在安装目录下 此时你会发现,配置文 ...
- linux下安装docker容器
1.安装环境 此处在Centos7进行安装,可以使用以下命令查看CentOS版本 lsb_release -a 在 CentOS 7安装docker要求系统为64位.系统内核版本为 3.10 以上,可 ...
- python实现99乘法表
for x in range(1,10): for y in range(1,10): if x>=y: print("%d*%d=%d\t"%(y,x,x*y),end=' ...
- AtCoder Beginner Contest 188 F - +1-1x2 思维题
题目描述 给你两个数 \(x\),\(y\) 可以对 \(x\) 进行 \(+1,-1\) 或 \(\times 2\) 的操作 问最少操作多少次后变为 \(y\) \(x,y \leq 10^{18 ...
- Spring Security OAuth2.0认证授权二:搭建资源服务
在上一篇文章[Spring Security OAuth2.0认证授权一:框架搭建和认证测试](https://www.cnblogs.com/kuangdaoyizhimei/p/14250374. ...