一、网络通信
IP地址:
1. IP网络中每台主机都必须有一个惟一的IP地址;
2. IP地址是一个逻辑地址;
3. 因特网上的IP地址具有全球唯一性;
4. 32位,4个字节,常用点分十进制的格式表示,例如:192.168.0.16。
协议:
1. 为进行网络中的数据交换(通信)而建立的规则、标准或约定;(=语义+语法+规则) ;
2. 不同层具有各自不同的协议。
端口号:
端口使用一个16位的数字来表示,它的范围是0–65535,1024以下的端口号保留给预定义的服务。例如:http使用80端口。
二、OSI(Open System Interconnection)参考模型
物理层:二进制传输,确定如何在通信信道上传递比特流;
数据链路层:加强物理层的传输功能,建立一条无差错的传输线路;
网络层:在网络中数据到达目的地有很多线路,网络层就是负责找出最佳的传输线路;
传输层:传输层为源端计算机到目的端计算机提供可靠的数据传输服务,隔离网络的上下层协议,使得上层网络应用的协议与下层无关;传输控制协议TCP、用户数据报协议UDP;
会话层:在两个相互通信的应用进程之间建立、组织和协调其相互之间的通信;
表示层:处理被传送数据的表示问题,也就是信息的语法和语义,如有必要将使用一种通用的格式在多种格式中进行转换;
应用层:为用户的应用程序提供网络通信服务;
三、网络编程
Java中通过代码在传输层中进行数据的传递,通过TCP协议或UDP协议实现其功能。
1.基于TCP的Socket编程步骤:
服务器程序编写
① 调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
ServerSocket server = new ServerSocket(port);
②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字;
Socket socket = server.accept();
③调用Socket类的getOutputStream()和getInputStream()获取输出流和输入流,开始网络数据的发送和接收;
InputStream in = socket.getInputStream();
④最后关闭通信套接字。
socket.close();
客户端程序编写
①调用Socket()创建一个流套接字,并连接到服务器端;
Socket socket = new Socket(ip, port);
②调用Socket类的getOutputStream()和getInputStream()获取输出流和输入流,开始网络数据的发送和接收;
InputStream in = socket.getInputStream();
③最后关闭通信套接字。
socket.close();
2.基于UDP的Socket编程步骤(简单介绍,不常用):
接收端程序编写
①调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上;
②调用DatagramPacket(byte[] buf, int length),建立一个字节数组以接收UDP包 ;
③调用DatagramSocket类的receive(),接收UDP包;
④最后关闭数据报套接字。
发送端程序编写
①调用DatagramSocket()创建一个数据报套接字;
②调用DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port),建立要发送的UDP包;
③调用DatagramSocket类的send(),发送UDP包;
④最后关闭数据报套接字。