网络编程
TCP/IP协议:多台计算机网络连接的规则
包括:TCP协议、IP协议、UDP协议和其它协议的协议组
层次结构:
链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。硬件方面的
网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
IP地址和端口号 (端口号:软件编号 Mysql:3306)
IP地址: 唯一标识一台计算机,
IPv4: 4个字节(0-255) 用点分开 如 “192.168.1.100”
IPv6: 16个字节,解决了网络地址资源数量不够的问题
端口号: 标识计算机中的应用程序 两个字节 范围是0~65535
0~1023: 知名的网络服务和应用,
1024~65535:用户的普通应用程序需要使用
InetAddress网络通信协议
public static void main(String[] args) throws UnknownHostException {
InetAddress inet=InetAddress.getLocalHost();//获取本地主机名、IP地址
System.out.println(inet);//Super_pc/192.168.145.1 //192.168.1.147
InetAddress inet2=InetAddress.getByName("Super_pc");//通过主机名(会重复)获取一个inet对象
System.out.println(inet2);//Super_pc/192.168.145.1
InetAddress inet3=InetAddress.getByName("192.168.145.1");//通过IP获取inet对象 可以是别人的IP
System.out.println(inet3);// /192.168.145.1
System.out.println(inet3.getHostName()); //返回对象主机名
System.out.println(inet3.getHostAddress()); //返回对象IP地址
}
UDP协议(传输 视频 音频)发送端 接收端
UDP是无连接通信协议,数据传输时,发送端和接收端不建立逻辑连接
发送端发出数据不会确认接收端是否存在
接收端收到数据不反馈给发送端
由于使用UDP协议消耗资源小,通信效率高,
由于UDP的面向无连接性,不能保证数据的完整性,
UDP传输数据被限制在64K以内
public class UDPSend {//发送端
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
InetAddress inet=InetAddress.getByName("192.168.1.174");
//通过IP获取地址对象
DatagramSocket ds=new DatagramSocket(); //数据包发送对象
while(true){
String str=sc.nextLine();
byte[] bytes=str.getBytes(); //要发送的数据 转字节
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,6000);
//数据包对象 (字节, 长度, 传输地址, 端口号)
ds.send(dp);//发送数据包
}
//ds.close();//释放资源
}
}
public class UDPRecieve {//接收端 先开启
public static void main(String[] args) throws IOException {
DatagramSocket ds=new DatagramSocket(6000);//数据包接收对象
byte[] bytes=new byte[1024];//字节数组 用来接收 数据
while(true){
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//数据包对象
ds.receive(dp); //接收数据 存储到dp
int length=dp.getLength(); //接收数据的长度
byte[] data = dp.getData(); //接收数据的字节数组
//String dataStr = new String(data,0,length);//显示收到的数据
String dataStr = new String(bytes,0,length);//显示收到的数据
InetAddress inet = dp.getAddress(); //获取地址对象
String ip = inet.getHostAddress(); //获取IP地址
int port=dp.getPort(); //端口号
System.out.print("IP地址:"+ip+",端口号:"+port+",内容:"+dataStr);
}
//ds.close();//释放资源
}
}