网络
计算机网络
把分布在不同地理区域的,具有独立功能的计算机,通过通信线路连接起来能实现资源传递共享、
网络编程
使用计算机语言开发软件。让软件能通过网络进行数据交换
网络模型:
网络通信要素:IP,端口号,通信协议
网络编程有三个要素分别是:IP地址、端口号和通信协议.
- IP地址
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址.网络中的计算机使用IP地址来进行唯一标识.
在Windows系统下,打开cmd,输入命令ipconfig,按回车即可查看。
本地回环地址(hostAddress):127.0.0.1 ,它代表设备的本地虚拟接口.
- 端口号
端口号是计算机中的应用程序的一个整数数字标号,用来区分不同的应用程序。
0 ~ 1024 未被系统使用或保留的端口号,0 ~ 65535为有效的端口号,也就是说我们要对一些程序定义端口号的时候,要选择1024 ~ 65535范围内的整数数字。
比如,以前学过的MySQL的端口号是3306,SQLServer的端口号是1433,Oracle的端口号是1521。
- 网络通信协议
计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、 传输控制步骤、出错控制等制定标准。
传输层协议中有两个非常重要的协议: 传输控制协议TCP(Transmission Control Protocol) 、用户数据报协议UDP(User Datagram Protocol)。
TCP
安全可靠的传输协议
每次传输数据时,先与服务器建立连接(三次握手)
保证网络通畅,然后再进行数据传输
断开时进行四次挥手 保证客户端和服务器端都知情
因为要建立连接所以传输较UDP慢.
三次握手
四次挥手
UDP
不需要建立网络连接
将数据,源,目标封装在数据报中
进行发送,发送是否成功,不知道.
不建立连接速度快,但是不安全
java网络编程
java语言支持网络通信.将支持网络编程的类都封装在java.net包中
TCP编程
服务器程序的工作过程:
public class Server {
public static void main(String[] args) throws IOException {
try {
//创建服务器
ServerSocket serverSocket = new ServerSocket(9999); System.out.println("服务器启动成功,等待客户端连接");
//监听客户端连接
Socket socket = serverSocket.accept();//监听是阻塞式的,直到有客户端连接上来,才继续向下执行
System.out.println("客户端连接成功");
//接收客户端发送的信息
InputStream in = socket.getInputStream();
byte[] b = new byte[100];
int size = in.read(b);//15
String s1 = new String(b, 0, size, "utf-8"); System.out.println("客户端说:"+s1);
}catch (BindException bindException){
System.out.println("端口已被占用");
}
}
}
客户端程序的工作过程:
public static void main(String[] args) throws IOException {
//创建客户端socket 创建时就会连接服务器,检查网络是否通畅
Socket socket = new Socket("127.0.0.1",9999);
OutputStream out = socket.getOutputStream();
out.write("你好服务器".getBytes("utf-8")); }}
UDP编程
UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
● DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
● UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接
发送端 :
public class Receive { public static void main(String[] args) throws IOException { DatagramSocket datagramSocket = new DatagramSocket(9999); byte[] b = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(b,b.length); datagramSocket.receive(datagramPacket); String msg = new String(datagramPacket.getData(),0,datagramPacket.getLength(), "utf-8"); System.out.println(msg);
}
}
接收端:
public class Receive {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(9999);
byte[] b = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(b,b.length); datagramSocket.receive(datagramPacket);
String msg = new String(datagramPacket.getData(),0,datagramPacket.getLength(), "utf-8"); System.out.println(msg);
}
}