网络编程 : 实现PC与PC之间的数据交互
B / S : Browers 浏览器 / Server 服务器
C / S : Client 客户端 / Server 服务器
网络编程 : 套接字编程 -> Socket编程
底层网络编程中 协议 分为两大类 : TCP/UDP
网络编程的三要素网络编程的三要素 :
IP地址 : 要通讯的设备在网络中的地址 --> 要通讯的设备地址
端口号 : 在通讯设备中找到需要通讯的软件(要通讯的线程)
网络协议 : TCP 面向连接的网络协议 /UDP 面向无连接的网络协议
IP地址 : 要通讯的设备在网络中的地址 --> 要通讯的设备地址
192.168.12.120 -> 老师的IP
cmd 命令 : ipconfig
IPV4 : 十进制点分法 -> 192.168.12.120 -> 32位表示IP地址的方式
IPV4地址占用 : 4 个字节 -> 最多数值的IPV4地址 : 255.255.255.255
192.168.网段.地址;
192.168.网段.1 : 网关地址 (路由器地址) 特点 : 一直在线
ping 192.168.网段.1
192.168.网段.255 : 广播地址
IPV6 : 十六进制冒分法 -> fe80:0000:b14f:9ff0:e75f:16e1 -> 64位表示IP地址的方式
InetAddressInetAddress :Java中表示IP地址的类
创建对象的方法 :
static InetAddress getByName(String host) : 获取IP地址对象 (String host) : 主机名/主机的ip地址 static InetAddress[] getAllByName(String host) : 因为主机名可能重名,当通过主机名获取ip地址对象时,返回多个IP地址对象被InetAddress[] 接收了 static InetAddress getLocalHost() : 快速获取当前主机的IP地址对象
成员方法:
String getHostName() : 获取当前IP地址对象指向的主机名 String getHostAddress() : 获取当前IP地址对象指向的主机IP地址端口号
端口号 : 在通讯设备中找到需要通讯的软件(通讯的线程) -> port
注意 :
1. 范围 : 0 - 65535
2. 端口号不能重复
3. 0-1000之间的端口号不要用,本地服务器 : 8080/80,MySql : 3306...
UDP协议 : 面向无连接的网络协议
UDP协议发送端的类
UDP协议发送端的类 : DatagramSocket
构造方法 :
DatagramSocket()
发送数据的方法 :
void send(DatagramPackage p)
数据报包对象的创建 : DatagramPackage
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
byte[] buf, int offset, int length : 要发送的数据
InetAddress address : 收件人的IP对象
int port : 端口号 -> 接收数据的软件
UDP协议接收端的类 : DatagramSocket
构造方法 :
DatagramSocket(int port)
接收数据的方法 :
void receive(DatagramPacket p)
接收端数据报包对象的创建 :
DatagramPacket(byte[] buf, int length)
byte[] buf : 接收数据的数组
int length : 用数组多长的内容接收数据
InetAddress getAddress() : 获取发件人的IP地址对象
byte[] getData() : 获取发送来的数据字节 -> 不会调用
int getLength() : 此次发送来的数据包中真实数据的长度
TCP协议 : 面向连接的网络协议
TCP协议的客户端代码
TCP协议的客户端 : Socket构造方法 :
Socket(InetAddress address, int port) :
InetAddress address : 服务端的IP地址对象
int port : 服务端通讯软件的端口号
发送数据的方法 :
OutputStream getOutputStream() : 获取通讯的输出流对象
public static void main(String[] args) throws IOException {
//创建TCP客户端的类
Socket socket = new Socket(InetAddress.getLocalHost(), 10086);//三次握手
//获取通讯的输出流对象
OutputStream os = socket.getOutputStream();
//往服务器发送数据
os.write("你好,服务器!".getBytes());
//关闭资源
//socket.close();//四次挥手
}
TCP协议的服务端代码
TCP协议的服务端 : ServerSocket构造方法 :
ServerSocket(int port)
接收数据的方法 : //所有通讯流的获取全是Socket对象完成的
Socket accept() : 监听 (监听客户端发来的请求)
通过Socket对象获取输入流对象,读取数据
Socket类中 : InputStream getInputStream()
Socket类中 : InetAddress getInetAddress() -> 客户端的IP地址对象
public static void main(String[] args) throws IOException {
//创建服务端的Socket对象
ServerSocket ss = new ServerSocket(10086);
//侦听获取服务端的Socket对象
Socket accept = ss.accept();
//服务端的Socket对象获取输入流对象
InputStream is = accept.getInputStream();
//读数据
byte[] bys = new byte[1024];
int len = is.read(bys);
//解析数据 -> byte[] --> String
String line = new String(bys, 0, len);
System.out.println("客户端发来的数据是 : " + line);
//获取客户端的信息
InetAddress address = accept.getInetAddress();
String hostName = address.getHostName();
String hostAddress = address.getHostAddress();
System.out.println("客户端的主机名是 : " + hostName);
System.out.println("客户端的主机IP地址是 : " + hostAddress);
//关闭服务器
//ss.close();
}



