网络编程
一、网络
(1)、IP
在因特网中,它是能使连接到网上的所有计算机网
络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。
- 特殊的IP:192.168.0.0~192.168.255.255 内部IP|私有IP,公司内部使用的IP地址
- 本地IP:127.0.0.1
- localhost:本机
- 域名-->IP :DNS解析器
(2)、端口Port
通过端口,可以在一个主机
上运行多个网络应用程序。可以用来区分软件
(3)、传输协议
- Tcp: 面向连接、安全、可靠,效率低
- Udp: 非面向连接、不安全、数据可能丢失 、 效率高
二、网络编程
1、InetAddress
方法
- static InetAddress getLocalHost() 返回本地主机。
- static InetAddress getByName(String host) 在给定主机名的情况下确定主机的 IP 地址
- String getHostAddress() 返回IP地址字符串(以文本表现形式)
- String getHostName() 获取此IP地址的主机名。
InetAddress address1=InetAddress.getLocalHost();
System.out.println(address1);
System.out.println(address1.getHostAddress());
System.out.println(address1.getHostName());
2、InetSocketAddress
java中使用InetSocketAddress表示端口,此类实现 IP 套接字地址(IP 地址 + 端口号)
建议: 8000以下预留端口号
常见端口:
- 80: http
- 8080: tomcat
- 1521: Oracle
- 3306: Mysql
方法:
- getAddress() 返回 InetAddress 对象
- getPort() 返回端口
InetSocketAddress i1=new InetSocketAddress("127.0.0.1",8888);
System.out.println(i1);
System.out.println(i1.getPort()); //8888
System.out.println(i1.getHostName()); //127.0.0.1
System.out.println(i1.getAddress()); //127.0.0.1
3 、URL
(1)统一资源定位符。是互联网的三大基石之一:html,url,http
(2)由4部分组成:
- 协议
- 主机域名
- 资源文件名
- 端口号
(3)URL 是指向互联网“资源”的指针
public class URLDemo03 {
public static void main(String[] args) throws MalformedURLException {
URL url=new URL("http://www.taobao.com:80/index.html?name=zhangsan&pwd=123#a");
System.out.println(url);
System.out.println("协议:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("文件:"+url.getFile());
/*
* String getQuery() 获取此 URL 的查询部分。
String getRef() 锚点
*/
System.out.println("查询数据:"+url.getQuery());
System.out.println("锚点:"+url.getRef());
}
}
三、Udp编程
- DatagramSocket :定义发送端和接收端
- DatagramPacket :打包
-
(1)、客户端udp实现基本流程
- 创建客户端 (DatagramSocket 类 +指定端口 )
- 准备数据,转为字节数组
- 封装成数据包 ( 需要指定包发送的地址+端口 即服务器地与端口)
- 发送数据
- 释放资源
public class UDPClient01 { public static void main(String[] args) throws IOException { System.out.println("----------------我是发送端---------------"); //1.定义发送端 DatagramSocket client=new DatagramSocket(8888); //2.准备数据 String str="哈哈"; byte[] arr=str.getBytes(); //3.打包 DatagramPacket packet=new DatagramPacket(arr,0,arr.length,new InetSocketAddress("127.0.0.1", 9999)); //4.发送void send(DatagramPacket p) 从此套接字发送数据报包。 client.send(packet); //5.关闭 client.close(); } }
(2)、服务器端udp实现基本流程
- 创建服务器 (DatagramSocket 类 +指定端口 )
- 接收包裹
- 操作数据
- 释放资源
public class UDPReceive02 { public static void main(String[] args) throws IOException { System.out.println("-------------接收端-------------"); //1.接收端 DatagramSocket server=new DatagramSocket(9999); //2.准备字节数组,用来打包,包裹接收数据的 byte[] arr=new byte[1024*60]; DatagramPacket packet=new DatagramPacket(arr,arr.length); //3.接收 server.receive(packet); //4.操作数据 System.out.println(packet.getData().length); System.out.println(packet.getLength()); System.out.println(new String(arr,0,packet.getLength())); //5.关闭 server.close(); } }
四、TCP编程
- Socket:发送 TCP 消息
- ServerSocket:创建服务器
- Socket accept():侦听并接受到此套接字的连接
-
(1)、客户端实现基本流程
- 定义客户端,连接服务器
- 发送数据
public class TCPClient01 { public static void main(String[] args) throws UnknownHostException, IOException { System.out.println("-------------我是客户端-------------"); //1.客户端 Socket client=new Socket("localhost",9999); //服务器的ip+端口号 //2.数据 String str="哈哈哈哈"; //3.获取输出流 DataOutputStream out= new DataOutputStream(client.getOutputStream()); out.writeUTF(str); out.flush(); //3.关闭 out.close(); client.close(); } }
(2)、服务器端实现基本流程
- 创建服务器 指定端口
- 等待客户端连接
- IO操作
- 关闭
public class TCPServer02 { public static void main(String[] args) throws IOException { System.out.println("-------------我是服务端-------------"); //1.定义服务端 ServerSocket server=new ServerSocket(9999); //2.阻塞式监听:一个客户端就是一个socket Socket client=server.accept(); //3.IO操作 DataInputStream is=new DataInputStream(client.getInputStream()); String str=is.readUTF(); System.out.println(str); //4.关闭 is.close(); client.close(); server.close(); } }