java_初始网络编程
/**
* 网咯编程入门:
* c/s结构:全称Client/Server结构,是指客户端和服务器结构。常见程序有qq、迅雷等如那件
* B/S结构:全称Browser/Server结构,是指浏览器和服务器结构,常见浏览器有谷歌、狐火等
*
* 网络通信协议:
* TCP/IP协议:
* 应用层 HTTP FTP TFTP SMTP SNMP DNS
* 传输层 TCP UDP
* 网络层 ICMP IGMP IP APP RAPP
* 数据链路层(物理层) 有底层网络定义的协议
* 协议分类:
* UDP:用户数据报协议(User Datagram protocl)无连接通讯协议,耗资小,通信效率高,偶尔丢失数据包,不能保证数据完整性,
* 特点:数据被限制在64kb以内,超出这个范围不能发送
* TCP:传输控制协议(Transmission Control Prtocol)TCP协议是面向连接的通信协议,传输前在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输
* 三次握手:TCP协议中在发送数据的准备阶段,客户端与服务器之间的三次交互,以保连接可靠
* 第一次握手:客服端向服务器端发出连接请求,等待服务器确认
* 第二次握手:服务器端向客户端会送一个响应,通知客户端收到了连接请求
* 第三次握手:客户端再次向服务器端发送确认信息,确认连接
* 完成三次握手:连接建立后,客户端和服务器开始传输数据,TCP可以保证数据安全所以应用广泛
* 网络编程三要素:
* 协议
* IP地址:
* 互联网协议地址,唯一的编号
* IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d的形式,例如192.168.65.100
* a.b.c.d都是0~255之间的十进制整数
* IPv4:IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分为8租十六进制数,表示为:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,解决了网络地址资源数量不够的问题
* 常用命令:
* ipconfig:查看本机ip地址在控制台输出
* ping 空格 ip地址(ping 220.181.57.216):检查网络是否连通,在控制台输出
* 特殊的IP地址:
* 本机IP地址:127.0.0.1、localhost
* 端口号:
* 逻辑端口,无法直接看见,可以使用一些软件查看端口号
* 当我们使用网络软件一打开,操作系统就会为网络软件分配一个端口号,或者网络软件在打开时和系统要指定的端口号
* 端口号由两个字节组成,取值范围在0~65535之间
* 取值注意事项:
* 1024之前的端口号不能使用,已经被系统分配给已知的网络软件
* 网络软件端口号不能重复
* 常用端口号:
* 80端口: 网络端口 www.baidu.com:80 正确的网址 www.baidu.com:70错误的端口号
* 数据库端口号 mysql:3306 oracle:1521
* Tomcat服务器:8080
*
* TCP通信:
* 面向连接通信,客户端和服务器端通过三次握手才能连接,通信安全。
* 通信的步骤:
* 1.服务器端启动
* 2.客户端请求服务器端
* 3.客户端和服务器端建立逻辑连接,这个连接包含一个对象(IO对象)
* 通信的数据不仅仅时字符,所以IO对象时字节流对象
* 服务器端必须明确两件事:
* 1.多个客户端同时和服务器进行交互,服务器必须明确和哪个客户端进行的交互
* 在服务器端有个方法accept客户端获取到请求的客户端对象
* 2.多个客户端和服务器进行交互,就需要使用多个IO流对象
* 服务器是没有IO流的,服务器可以获取到请求的客户端对象Socket
* 使用每个客户端Socket中提供的IO流和客户端进行交互
* 服务器使用客户端的字节输入流读取客户端发送的数据
* 服务器使用客户端的字节输出流给客户端回写数据
* 简易记:服务器使用客户端的流和客户端交互
* 1.TCP通信的客户端:
* 向服务器发送请求,给服务器发送数据,读取服务器的回写数据
* java.net.Socket:此类实现客户端套接字(可以就叫"套接字")。套接字是两台计算机之间通信的端点。
* 套接字:包含了IP地址和端口号的网络单位
* 构造方法:
* Socket(String host,int port):
* 参数:
* String host:服务器主机名称/服务器的IP地址
* int port:服务器的端口号
* 方法:
* OutputStream getOutputStream():返回此套接字的输出流
* InputStream getInputStream():返回此套接字的输入流
* void close():关闭此套接字
* 实现步骤:
* 1.创建客户端对象Socket,构造方法绑定服务器的IP地址和端口号
* 2.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
* 3.使用网络字节输出流OutputStream对象中的方法write给服务器发送数据
* 4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
* 5.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
* 6.释放资源(Socket)
* 注意事项:
* 1.客户端和服务器进行交互必须使用Socket中提供的网络流不能使用自己创建的流对象
* 2.当创建客户端对象Socket时会去请求服务器和服务器进行三次握手建立连接通路
* 如果服务器没有启动会抛出异常
* 如果服务器已经启动就可以进行交互
* 2.TCP通信的服务器端:
* 接受客户端的请求,读取客户端的数据,给客户端回写数据
* java.net.ServerSocket:此类实现服务器套接字
* 构造方法:
* ServerSocket(int port):创建绑定到指定端口的服务器套接字
* 服务器明确一件事情:必须知道是哪个客户端请求的服务器
* 所以可以使用accept方法获取到请求的客户端对象Socket
* 成员方法:
* Socket accept():侦听并接受到此套接字的连接
* 服务器实现步骤:
* 1.创建一个服务器ServerSocket对象和系统要指定的端口号
* 2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
* 3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
* 4.使用网络字节输入流InputStream对象中read方法,读取客户端发送的数据
* 5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
* 6.使用网路字节输出流OutputStream对象中的方法write给客户端回写数据
* 7.释放资源(Socket,ServerSocket)
*
*/
}
服务器
/** 2.TCP通信的服务器端:
* 接受客户端的请求,读取客户端的数据,给客户端回写数据
* java.net.ServerSocket:此类实现服务器套接字
* 构造方法:
* ServerSocket(int port):创建绑定到指定端口的服务器套接字
* 服务器明确一件事情:必须知道是哪个客户端请求的服务器
* 所以可以使用accept方法获取到请求的客户端对象Socket
* 成员方法:
* Socket accept():侦听并接受到此套接字的连接
* 服务器实现步骤:
* 1.创建一个服务器ServerSocket对象和系统要指定的端口号
* 2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
* 3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
* 4.使用网络字节输入流InputStream对象中read方法,读取客户端发送的数据
* 5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
* 6.使用网路字节输出流OutputStream对象中的方法write给客户端回写数据
* 7.释放资源(Socket,ServerSocket)
*
*/
class ServerSocket{
public static void main(String[] args) throws IOException {
//1.创建一个服务器ServerSocket对象和系统要指定的端口号
java.net.ServerSocket serverSocket = new java.net.ServerSocket(8888);
//2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
Socket socket = serverSocket.accept();
//3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream inputStream = socket.getInputStream();
//4.使用网络字节输入流InputStream对象中read方法,读取客户端发送的数据
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
// 5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
OutputStream outputStream = socket.getOutputStream();
//6.使用网路字节输出流OutputStream对象中的方法write给客户端回写数据
outputStream.write("你好客户端".getBytes());
//7.释放资源(Socket,ServerSocket)
socket.close();
serverSocket.close();
}
}
实现:
客户端的实现:
* 1.TCP通信的客户端:
* 向服务器发送请求,给服务器发送数据,读取服务器的回写数据
* java.net.Socket:此类实现客户端套接字(可以就叫"套接字")。套接字是两台计算机之间通信的端点。
* 套接字:包含了IP地址和端口号的网络单位
* 构造方法:
* Socket(String host,int port):
* 参数:
* String host:服务器主机名称/服务器的IP地址
* int port:服务器的端口号
* 方法:
* OutputStream getOutputStream():返回此套接字的输出流
* InputStream getInputStream():返回此套接字的输入流
* void close():关闭此套接字
* 实现步骤:
* 1.创建客户端对象Socket,构造方法绑定服务器的IP地址和端口号
* 2.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
* 3.使用网络字节输出流OutputStream都西昂中的方法write给服务器发送数据
* 4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
* 5.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
* 6.释放资源(Socket)
* 注意事项:
* 1.客户端和服务器进行交互必须使用Socket中提供的网络流不能使用自己创建的流对象
* 2.当创建客户端对象Socket时会去请求服务器和服务器进行三次握手建立连接通路
* 如果服务器没有启动会抛出异常
* 如果服务器已经启动就可以进行交互
*/
class Client{
public static void main(String[] args) throws IOException {
// 1.创建客户端对象Socket,构造方法绑定服务器的IP地址和端口号
Socket socket = new Socket("127.0.0.1",8888);
//2.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象
OutputStream outputStream = socket.getOutputStream();
// 3.使用网络字节输出流OutputStream对象中的方法write给服务器发送数据
outputStream.write("你好服务器".getBytes());
//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream inputStream = socket.getInputStream();
//5.使用网络字节输入流InputStream对象中的read读取服务器回写的数据
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
//6.释放资源(Socket)
socket.close();
}
}
java_初始网络编程的更多相关文章
- python网络编程
Socket是网络编程的一个抽象的概念. 通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套 ...
- Windows 网络编程
网络编程 API ,失败返回 -,错误代码 WSASYSNOTREADY 表示基础网络子系统没有准备好网络通行,WSAVERNOTSUPPORTED 表示 Socket 版本不支持,WSAEINPRO ...
- python高级之网络编程
python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说 ...
- C#网络编程二:Socket编程
一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...
- [转]C#网络编程(基本概念和操作) - Part.1
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part1.aspx 引言 C#网络编程系列文章计划简单地讲述 ...
- Linux网络编程&内核学习
c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...
- linux网络编程_1
本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...
- Linux网络编程入门 (转载)
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- [转] - Linux网络编程 -- 网络知识介绍
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
随机推荐
- zookeeper基本概述
zookeeper是一个分布式的协调服务框架 其本质是一个分布式的小文件存储系统,可以存储一些小的文件,官方建议每个小文件不要超过一兆 zk一般都是装奇数台,便于zk内部的一些投票选举 leader: ...
- Python-爬虫-requests库用语post登录
requests库很强大,支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码. 可以发送无参数的get请求, ...
- detours编译与windows下makefile学习
1.编译 windows环境命令行编译很少用,detours需要使用命令行编译,刚好试试,过程如下: 1.为了能够在所有目录中使用nmake命令,需要设置环境变量Path D:\Program Fil ...
- IOS中input光标跑偏问题的解决方法
ios端兼容input光标高度处理 在最近的项目中遇到一个问题,input输入框光标,在安卓手机上显示没有问题,但是在苹果手机上 当点击输入的时候,光标的高度和父盒子的高度一样.造成的原因就是给父盒子 ...
- 《DSP using MATLAB》Problem 9.2
前几天看了看博客,从16年底到现在,3年了,终于看书到第9章了.都怪自己愚钝不堪,唯有吃苦努力,一点一点一页一页慢慢啃了. 代码: %% ------------------------------- ...
- List<Map>中根据map的同一指标项数据——去重代码
先看网络上,博客经常出现的错误代码: for(ABatchAddCheckVO aBatchAddCheckVO : addList){ dto.put("aac001",aBat ...
- linq语句,常用的查询,模糊查询,实体查询
查询: //List是要查询的实体列表的集合 List.FindAll(n => n.NAME == NAME), //NAME变量是要查询的条件 模糊查询 List.FindAll(s ...
- Web安全之跨站伪造请求(CSRF)
CSRF简介 CSRF全称跨站伪造请求(Cross-site request forgery)也称为one click attack/session riding,还可以缩写为XSRF 通俗说就是利用 ...
- 使用FastJson转化Json格式
1.下载Jar包 http://repo1.maven.org/maven2/com/alibaba/fastjson/ 2.将jar包导入工程 3.示例 package nc.testFastJso ...
- thinkphp 空控制器
空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化. 大理石平台价格表 现在我们把前 ...