目录
网络编程
(1)概述
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。
实现网络中的主机通信
1.通信双方的地址:IP、端口号
2.一定的规则:网络通信协议(OSI参考模型、TCP、IP协议)
(2)IP和端口号
IP地址:对应InetAddress类,一个对象代表一个IP地址;
- IP地址唯一标识Internet上的计算机
- 本地回环地址为(hostAddress):127.0.0.1
- 本地主机名(hostName):localhost
IP地址分类
IPV4:4个字节组成
IPV6:16个字节,写成8个整数,每个整数用4位十六进制数表示,数之间用冒号隔开(X:X:X:X:X:X:X:X,X=_ _ _ _)
也可以分为
公网地址:万维网使用
私有地址:局域网使用,192.168开头,范围是0.0——255.255
InetAddress
InetAddress类,一个对象代表一个IP地址;
InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
getByName(String host)//InetAddress类中的静态方法,获得IP地址对象
getLocalHost()//静态方法,获取本地IP地址
//常用方法(非静态)
getHostAddress()//获取本地地址
getHostName()//获取本地域名
InetAddress常用方法
序号 | 方法描述 |
---|---|
1 | static InetAddress getByAddress(byte[] addr) 在给定原始 IP 地址的情况下,返回 InetAddress 对象。 |
2 | static InetAddress getByAddress(String host, byte[] addr) 根据提供的主机名和 IP 地址创建 InetAddress。 |
3 | static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址。 |
4 | String getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 |
5 | String getHostName() 获取此 IP 地址的主机名。 |
6 | static InetAddress getLocalHost() 返回本地主机。 |
7 | String toString() 将此 IP 地址转换为 String。 |
域名
www.baidu.com
本地回路地址
127.0.0.1 对应localhost
端口号
- 标识正在计算机上运行的进程;
- 不同的进程对应不同的端口号;
- 端口地址是16比特,可以有在0—65535范围内的端口号;
端口分类
1.公认端口:0——1023,系统的保留端口,程序尽可能别使用这些端口;
2.注册端口:1024——49151
3.动态/私有端口:49152——65515
特定的端口号:MySQl 3306;Tomcat 8080
(3)Socket
IP地址和端口号的组合得到一个网络套接字:Socket;
Socket(套接字)用来描述IP地址和端口,是通信链的句柄,应用程序可以通过Socket向网络发送请求或者应答网络请求;
Socket是支持TGP/IP协议的网络通信的基本操作单元,是对网络通信过程中端点的抽象表示,包含了进行网络通信所必须的五种信息:
1.连接所使用的协议;
2.本地主机的IP地址;
3.本地远程的协议端口;
4.远地主机的IP地址;
5.远地进程的协议端口;
Socket通信模型
Socket通信实例
public class ServerDemo extends Thread {
//服务端
private ServerSocket serverSocket;
public ServerDemo(int port) throws IOException{
serverSocket=new ServerSocket(port);
serverSocket.setSoTimeout(10000);
}
@Override
public void run() {
while (true){
try {
System.out.println("等待远程连接,端口号为:"+serverSocket.getLocalPort());
Socket server=serverSocket.accept();
System.out.println("远程主机地址:"+server.getRemoteSocketAddress());
DataInputStream dataInputStream=new DataInputStream(server.getInputStream());
System.out.println(dataInputStream.readUTF());
DataOutputStream dataOutputStream=new DataOutputStream(server.getOutputStream());
dataOutputStream.writeUTF("连接成功"+server.getLocalSocketAddress()+