一、前言
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。
-
计算机网络:
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。 -
网络编程的目的:
直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。
二、网络通信要素
要素一:IP和端口号
IP和端口是通信双方的地址。
- ① 网络中的计算机是通过IP地址来代表其身份的,它只能表示某台特定的计算机,但是一台计算机上可以同时提供很多个服务;IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用端口来区分这些应用程序。
- ②端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。
1.IP:唯一的标识Internet 上的计算机(通信实体)
2.在Java中使用InetAddress类代表IP
3.IP的分类: IPV4 和 IPV6 ;万维网 和 局域网
4.域名:www.baidu.com (相对形象容易记)
5.本地回路地址:127.0.0.1 d 对应着:localhost
6.如何实例化InetAddress: 两个方法 :getByName(String host) getLocalHost()
7.端口号标识正在计算机上运行的进程(程序)
要求:不同的进程有不同的端口号
范围:被规定为一个 16 位的整数 0~65535。
8.端口号与IP地址的组合得出一个网络套接字:Socket。
public class InetAddressTest {
public static void main(String[] args) {
try {
InetAddress inet1 = InetAddress.getByName("192.168.00.24");
System.out.println(inet1);
InetAddress inet2 = InetAddress.getByName("www.baidu.com");
System.out.println(inet2);
//获取本地ip(1)
InetAddress inet3 = InetAddress.getByName("localhost");
System.out.println(inet3);
//获取本地ip(2)
System.out.println(InetAddress.getLocalHost());
System.out.println(inet3.getHostName());//获取域名
System.out.println(inet3.getHostAddress());//获取ip
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
ServerSocket类方法,Socket类方法,InetAddress类的方法:
更多的方法描述,请参考菜鸟教程📚
要素二:网络协议
①网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。
②TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即物理链路层、IP层、传输层和应用层。
① OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广。
② TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。
三、TCP网络编程
TCP(英语:Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。
TCP协议:
- 使用TCP协议前,须先建立TCP连接,形成传输数据通道。
- 传输前,采用“三次握手”方式,点对点通信,是可靠的。
- TCP协议进行通信的两个应用进程:客户端、服务端。
- 在连接中可进行大数据量的传输。
- 传输完毕,需释放已建立的连接,效率低。
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;