什么是计算机网络
把分布不同地理区域的计算机与专门的外部设备通讯线路互联成一个规模大、功能强的网络系统,从而使众多计算机可以方便的互相传递信息,共享硬件、软件、数据信息等资源。
计算机网络的主要功能
资源共享
信息传输与集中处理
均衡负荷与分布处理
综合信息服务(www/综合业务数字网络ISN等
网络通信协议
要使计算机连成的网络能够互通信息,需要对数据传输速率、传输代码、代码结构、传输控制步骤、出错控制等指定一组标准,这一组共同遵守的通信标准就是网络通讯协议,不同的计算机之间必须使用相同的通讯协议才能进行通信。
(1)硬件装置:实现节点之间的信息传送
(2)软件装置:规定双方进行通信的约定协议
TCP/IP传输控制协议、因特网互联协议,又叫网络通信协议。这个协议是Internet国际互联网络的基础,简单的说,就是由网络层的IP协议和传输层的TCP协议组成的。
IP地址:网络中每台计算机的一个标识号,本地IP:127.0.0.1localhost端口号(PORT):端口号的范围:0~65535之间,0~1023之间的端口数是用于一些知名的网络服务和应用
程序开发结构
网络编程主要是指定完成c/s程序的开发,程序的开发结构有两种:
c/s(客户端、服务端)
开发两套程序,两套程序需要同时维护,例如:QQ,cs程序一般比较稳定
B/s(浏览器/服务器)
开发一套程序,客户端使用浏览器进行访问,例如:各个论坛BS程序一般稳定性较差,而且安全性较差。但是,c/s的程序开发在实际Java应用中毕竟很少,而整个Java基本上都是以B/S为主。
C/S程序主要可以完成以下两种程序的开发:
TCP:(Transmission Control Protocol)传输控制协议,采用三方握手的方式,保证准确的连接操作。
UDP:(User Datagram Protocol)数据报协议、发送数据报、例如:手机短信或者QQ消息
TCP、UDP的数据帧格式简单图例:
协议类型 | 源IP | 目标IP | 源端口 | 目标端口 | 帧序号 | 帧数据 |
其中协议类型用于区分TCP、UDP
网络编程TCP协议
TCP是一个可靠的协议,面向连接的协议。
实现TCP程序,需要编写服务器端和客户端,JavaAPI为我们提供了Java.net包、为实现网络应用程序提供类。
ServerSocket:此类实现服务器套接字
Socket:此类实现客户端接字(也可以叫做“套接字”)
Socket:是网络驱动层提供给应用程序编程的接口和一种机制
数据发送过程
实现服务端与客户端程序
服务器端
om.vince1;import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class EchoServerDemo { public static void main(String[] args) { try { ServerSocket server=new ServerSocket( 6666 ); System.out.println( "服务器已启动,正在等待客户端的连接........" ); //等待客户端的连接、造成阻塞,如果有客户端连接成功,立即返回一个Socket对象 Socket socket=server.accept(); System.out.println("客户端连接成功"+server.getInetAddress().getHostAddress()); BufferedReader br=new BufferedReader(new InputStreamReader (socket.getInputStream())); //通过输入流读取网络数据、如果没有数据那么会阻塞 String info= br.readLine(); System.out.println( info ); //获取输出流、向客户端返回消息 PrintStream ps=new PrintStream(new BufferedOutputStream (socket.getOutputStream())); ps.println( "echo:"+info ); ps.flush(); //关闭 ps.close(); br.close(); } catch (IOException e) { e.printStackTrace( ); } }}
package om.vince1;import java.io.*;import java.net.Socket;public class EchoClientDemo { public static void main(String[] args) { //创建一个Socket对象、指定要连接的服务器 try { Socket socket=new Socket( "locklhost",6666 ); //获取socket的输入流输出流 PrintStream ps=new PrintStream(new BufferedOutputStream (socket.getOutputStream())); BufferedReader br=new BufferedReader (new InputStreamReader(socket.getInputStream())); ps.println( "hello,my name is Run" ); ps.flush(); //读取服务端返回的数据 String info=br.readLine(); ps.close(); br.close(); } catch (IOException e) { e.printStackTrace( ); } }}
UDP协议
UDP是User Datagram Potocol简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传入目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能保证的、每个被传输的数据报必须限定在64KB之内。
主要使用以下两个类:
DatagramPqacket:此类表示数据报包
DatagramSocket:此类表示用来发送和接收数据包的套接字
URL
URL(uniforrm resource location)类URL代表一个统一资源定位符、它是指向互联网“资源”的指针,抽象类URLConnection是所有类的超类,它代表应用程序URL之间的通信连接
MINA框架
什么是MINA?一句话就是:一个简洁易用的基于TCP/IP通信的Java 框架。
下载地址:http://mina.apache.org/downloads-mina.html
一个简单的网络程序需要的最少jar包:mina-core-2.0.16.jar、slf4j-api-1.7.21.jar
开发一个Mina应用,简单的说,就是创建连接,设定过滤规则,编写自己的消息处理器
1、创建一个非阻塞的Server端Socket,用NIO
创建数据过滤器
2、设定这个过滤器将一行一行(/r/n)的读取数据
3、设定服务器端的消息处理器:一个SampleMinaServerHandler对象
4、绑定端口、启动服务器