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= ...
随机推荐
- mysql数据库的连接以及增删改查Java代码实现(转载)
每天叫醒自己的不是闹钟,而是梦想 数据库: create table t1(id int primary key not null auto_increment,name varchar(32),pa ...
- 解决npm ERR!
一:[Unexpected end of JSON input while parsing near]报错 最近的vue项目中在执行 npm install 时会报错误: npm ERR! Unexp ...
- dalao高精
#ifndef MY_BIGN_H#define MY_BIGN_H 1#pragma GCC system_header#include<cstring>#include<algo ...
- OpenManipulator RM-X52 ROS 开源机械臂
DYNAMIXEL PRO PH54-200-S500-R 简介
- 线程安全问题synchronized锁
1.线程安全问题的原因 因为 Java 中对静态变量的自增,自减并不是原子操作,要彻底理解,必须从字节码来进行分析 例如对于 i++ 而言(i 为静态变量),实际会产生如下的 JVM 字节码指令: ...
- int和Integer的区别?包装类?装箱?拆箱?
int和Integer的区别: 1) int是基本数据类型,直接存储的数值,默认是0; 2) Integer 是int的包装类,是个对象,存放的是对象的引用,必须实例化之后才能使用,默认是null; ...
- shell实现99乘法表
#!/usr/bin/env sh for ((x=1;x<10;x++));do for ((y=1;x>=y;y++));do printf "${y}x${x}=$(exp ...
- 3.k8s存储之ConfigMap、Secret
1.ConfigMap ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息.ConfigMap API 给我们提供了向容器 ...
- Mac M1原生(ARM64)Golang dev&debug
前言 通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题. Go 1.16版将正式支持Apple Silicon M1芯片,即arm64架构 ...
- 科来网络通讯协议图2019版(OSI七层模型)
来源:http://www.colasoft.com.cn/download/protocols_map.php 自己把它转成了图片,好做查看:https://www.lanzous.com/ib5h ...