软件结构:java
C/S结构:全称为Client/Server结构,是指客户端和服务器结构,常见程序有QQ等mysql
B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构,常见浏览器有谷歌等sql
网络通讯协议:对数据的传输格式、传输速率、传输步骤等作了统一规定,通讯双方必须同时遵照才能完成数据交换数据库
TCP/IP协议:传输控制协议/因特网互联协议,是internet最基本、最普遍的协议。他定义了计算机如何联入因特网,以及数据如何在它们之间传输的标准。他的内部包含一系列的用于处理数据通讯的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议完成本身的需求。编程
链路层:用于定义物理传输通道,一般是对某些网络链接设备的驱动协议,例如针对光纤、网线提供的驱动浏览器
网络层:用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络tomcat
运输层:主要使网络程序进行通讯,在进行网络通讯时,能够采用TCP协议,也能够采用UDP协议服务器
应用层:主要负责应用程序的协议,例如HTTP,FTP协议网络
UDP:用户数据报协议,消耗资源小,通讯效率高,是无链接通讯协议,简单说就是当一台计算机向另一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,一样接收端在收到数据时,也不会向发送端反馈是否收到数据,经常使用于音频、视频和普通数据传输。oracle
TCP:传输控制协议,是面向链接的通讯协议,在传输数据前要通过“三次握手” 后创建逻辑链接,再传输数据,他提供了两台计算机之间可靠无差错的数据链接,经常使用来下载文件和浏览网页。
网络编程三要素:
一、协议
二、IP地址:互联网协议地址,用来给一个网络中的计算机设备作惟一的编号。
IPv4:一个32位的二进制数,一般被分红4个字节,表示成a.b.c.d的形式,其中a,b,c,d都是0-255之间的十进制整数,那么最多能够表示42亿
IPv6:采用128位地址长度,每16个字节一组,分红8组十六进制数
经常使用命令:ipconfig,ping
特殊IP地址:127.0.0.1,localhost
三、端口号:是一个逻辑端口,咱们没法直接看到,可使用一些软件查看端口号
当咱们使用网络软件一打开,那么操做系统就会位网络软件分配一个随机的端口号或者网络软件打开的时候和系统要指定端口号
端口号是由两个字节组成,取值范围在0-65535之间
注意:1024以前的端口号咱们不能使用,已经被系统分配给已知的网络软件
经常使用端口号:80,网络端口
数据库:3306,mysql;1521,oracle
tomcat服务器:8080
TCP通讯程序:TCP通讯能实现两台计算机之间的数据交互,通讯两端要严格区分客户端(Client)和服务端(Server)
两端通讯时的步骤:一、服务端程序,须要事先启动,等待客户端端链接
二、客户端主动链接服务器端,链接成功才能通讯。服务端不能够主动链接客户端
java.net.Socket:此类实现客户端套接字(也能够叫“套接字”)。套接字是两台机器间通讯的端点
构造方法:Socket(String host , int port)建立一个流套接字并将其链接到指定主机上的指定端口号
参数:String host:服务器主机的名称/服务器IP地址
int port:服务器的端口号
成员方法:OutputStream getOutputStream ()返回此套接字的输出流
InputStream getInputStream()返回此套接字的输入流
void close()关闭此套接字
实现步骤:一、建立一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
二、使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
三、使用网络字节输出流的OutputStream对象中的方法write,给服务器发送数据
四、使用socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
五、使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
六、释放资源
注意:一、客户端和服务器进行交互,必须使用Socket中提供的网络流,不能使用本身建立的流对象
二、当咱们建立客户端对象Socket的时候,就会去请求服务器和服务器通过3次握手创建链接通路
这是若是服务器没有启动,就会抛出异常
若是服务器已经启动,那么就能够进行交互
java.net.ServerSocket:此类实现服务器套接字
构造方法:ServerSocket(int port)建立绑定到特定端口的服务器套接字
服务器端必须明确一件事情,必须得知道是哪一个客户端请求的服务器
因此可以使用accept方法获取到请求的客户端对象Socket
成员方法:Socket accept()侦听并接受到此套接字的链接
服务器实现步骤:一、建立服务器ServerSocket对象和系统要指定的端口号
二、使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
三、使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
四、使用网络字节输入流InputStream中的方法read,读取客户端发送的数据
五、使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
六、使用网络字节输出流OutputStream对象中的方法write给客户端回写数据
七、释放资源
文件传输示例代码:
public class Demo { public static void main(String[] args)throws Exception { ServerSocket serverSocket = new ServerSocket(8888); Socket clientSocket = new Socket("127.0.0.1",8888); File file =new File("c/a.txt"); FileInputStream fis = new FileInputStream(file); OutputStream os=clientSocket.getOutputStream(); int len = 0; byte[] bytes = new byte[1024]; while ((len=fis.read(bytes))!=-1){ //System.out.println(len); byte[] wri=Arrays.copyOf(bytes,len); os.write(wri); } Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); byte[] buffer =new byte[1024]; int len1= 0; while ((len1=inputStream.read(buffer))!=-1){ String str = new String(Arrays.copyOf(buffer,len1),0,len1,"UTF-8"); System.out.println(str); } fis.close(); socket.close(); }