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= ...
随机推荐
- 为什么Java中lambda表达式不能改变外部变量的值,也不能定义自己的同名的本地变量呢?
作者:blindpirate链接:https://www.zhihu.com/question/361639494/answer/948286842来源:知乎著作权归作者所有.商业转载请联系作者获得授 ...
- mysql的binlog+maxwell+kakka
1.业务库痛点及解决⽅案 初期出⾏业务的订单相关,是以mysql作为业务库为基准的,但是随着业务线增多,每⽇新增数据指 数上涨,⼏乎在每天的⾼峰期期间,都会出现业务库所在服务器的cpu.IO.内存等跑 ...
- 20210105 - python自动化办公简介
新的一年开始了, 计划每周至少更新三篇博客. 人生苦短,如果不做改变,人生很快会过去!2021年寻求改变,加油! python自动化办公: 1.相关工具与环境的安装概要: 需要用到python(一种开 ...
- Ubuntu 一直要求依赖的错误
今天笔者在windows上装linux双系统,选用的ubuntu,因为第> 一次用,所以出现了这个问题. 如题,安装个gcc一直要求我要装依赖,如图 接下来我又开始一个个安装那些依赖,比如 su ...
- Jmeter(三十五) - 从入门到精通进阶篇 - 关联(详解教程)
1.简介 上一篇中介绍了如果想要同时发送多条请求,那么怎样才能让每条数据某些请求参数改变呢.这就用到了jMeter参数化.在实际测试场景中,我们往往还有这样的需求,登录后服务器响应的token作为下次 ...
- Fail2ban工具使用
Fail2ban fail2ban扫描日志文件并且可以识别禁用某些多次尝试登录的IP,通过更新系统的防火墙规则来实现拒绝该IP连接,也可以配置禁用的时间.fail2ban提供了一些常用软件默认的日 ...
- Linux 服务器安装node环境
Linux 装 node 环境 我的是 CentOS 查看服务器是多少位系统 getconf LONG_BIT 下载地址, 下载对应的版本: http://nodejs.cn/download/ 我这 ...
- three.js 之cannon.js物理引擎
今天郭先生说的是一个物理引擎,它十分小巧并且操作简单,没错他就是cannon.js.这些优点都源自于他是基于js编写的,对于js使用者来说cannon.js拥有其他物理引擎没有的纯粹性.从学习成本来看 ...
- mysql中更改字段属性实际上都做了哪些操作
mysql> set profiling=1; Query OK, 0 rows affected (0.00 sec) mysql> alter table test modify n ...
- 【IMP】导出的时候显示ddl建表语句
导出数据后,在导入的时候想要显示出建表语句,可以用show=y这个选项来实现 imp test/test file=test.dmp ignore=y show=y fromuser=test1 to ...