网络编程:
IP:定位网络上的节点,电脑,手机,服务器,路由器…(电子设备)
网络中的IP重要分为2大类: IPV4 32 IPV6 128
特殊的ip:
192.168.0.0~192.168.255.255 非注册IP,供组织内部使用
127.0.0.1 本地IP
localhost: 本地域名
ip与域名 DNS服务器
java中如何表示IP:
InetAddress 这个类代表一个互联网协议(IP)地址。
端口:区分软件
url:定位资源 统一资源定位符
协议: 协议就是交流方式, 更畅通,更标准,更规范
传输协议: 传输数据满足传输协议
tcp:相当于打电话 ***
udp:相当于写信
InetAddress in1=InetAddress.getLocalHost();//返回本机的地址
System.out.println(in1);
InetAddress in2=InetAddress.getByName("www.baidu.com"); //参数可以是IP和域名
System.out.println(in2);
System.out.println(in1.getHostAddress());//返回的IP地址字符串的文本表示。
System.out.println(in1.getHostName()); //这个IP地址的主机名。
端口:区分软件
统一协议下端口不能冲突 tcp udp
0~65535 2个字节 表示端口
建议使用8000以上的端口号自定义
预留端口号:
-
80: http
*8080: tomcat -
1521: oracle
-
3306: mysql
-
在java中表示端口: InetSocketAddress IP地址+端口号
/*
* InetSocketAddress(InetAddress addr, int port)创建一个套接字地址的IP地址和端口号。
* InetSocketAddress(String hostname, int port) 创建一个套接字地址的主机名和端口号。
*/
InetSocketAddress net1=new InetSocketAddress("localhost",8888);
InetSocketAddress net2=new InetSocketAddress( InetAddress.getLocalHost(),8888);
System.out.println(net1);
System.out.println(net2);
/*
* getPort() 的端口号。
* String getHostName() ip
*/
System.out.println(net1.getPort()); //8888
System.out.println(net1.getHostName()); //localhost
System.out.println(net1.getAddress()); //localhost/127.0.0.1
URL: 统一资源定位符
- 互联网的三大基石: url html http
- 协议: http
- 域名:www.baidu.com
- 端口:80
- 资源:index.html
- 数据:uname=zhangsan&pwd=123
- 锚点:#a
- “http://www.baidu.com:80/index.html?uname=zhangsan&pwd=123#a”
- java中表示url:
- URL
URL url=new URL("http://www.baidu.com:80/index.html?uname=zhangsan&pwd=123#a");
System.out.println("协议:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("文件:"+url.getFile());
System.out.println("数据资源:"+url.getQuery());
System.out.println("锚点:"+url.getRef());
面向Socket套接字编程:
-
socket就是传输层为引用层开辟的小口子
-
tcp和udp对socket的实现不同
-
udp: 发信息,非面向连接 不安全 协议简单,开销小,效率高 大小有限制,一般不超过60k
-
tcp: 打电话,面向连接 安全,效率低 基于3次握手: 1.拨号 2.响应,连接上 3.发送数据
-
udp: 基于字节数组
-
DatagramSocket
-
DatagramPacket
-
udp实现基本流程: 发送端
-
1.定义发送端
-
DatagramSocket(int port) 构造一个数据报套接字绑定到本地主机上的指定端口。
-
2.准备数据
-
3.给数据打包
-
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据报包发送数据包的长度 length指定主机上的指定端口号。
-
4.发送
-
5.关闭
public static void main(String[] args) throws IOException {
System.out.println("------------------发送端-------------------");
//1.定义发送端
DatagramSocket client= new DatagramSocket(8888);
//2.数据
byte[] str="因为哈哈".getBytes();
//3.打包
DatagramPacket packet=new DatagramPacket(str,str.length,new InetSocketAddress("localhost", 9999));
//4.发送
client.send(packet);
//5.关闭
client.close();
}
udp实现基本流程: 接收端
- 1.定义接收端
- 2.准备盒子接收数据
- DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket length接收数据包的长度。
- 3.接收 receive(packet)
- 4.关闭
public static void main(String[] args) throws IOException {
System.out.println("------------------接收端-------------------");
//1.定义接收端
DatagramSocket server= new DatagramSocket(9999);
//2.准备一个字节数组,打包
byte[] car=new byte[1024];
DatagramPacket packet=new DatagramPacket(car,car.length);
//3.接收
server.receive(packet);
//处理数据
/*
byte[] getData()
返回数据缓冲区。
int getLength()
返回数据的长度发送或接收到的数据的长度。
*/
byte[] datas=packet.getData();
int length=packet.getLength();
System.out.println(new String(datas,0,length));
//5.关闭
server.close();
tcp实现基本流程: 客户端
- 1.定义客户端 Socket Socket(String host, int port) 创建一个流套接字连接到指定主机上的指定端口号。
- 2.准备数据
- 3.写出 IO操作
- 4.关闭
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("-------------Client-----------");
//1.定义客户端 Socket Socket(String host, int port)
Socket client=new Socket("127.0.0.1",7777);
//2.准备数据
String str="name=zhangsan&pwd=123";
//3.写出 IO操作
DataOutputStream data=new DataOutputStream(client.getOutputStream());
data.writeUTF(str);
data.flush();
//4.关闭
data.close();
client.close();
}
tcp实现基本流程: 服务端
- 1.定义服务端 ServerSocket ServerSocket(int port) 创建一个服务器套接字绑定到指定端口。
- 2.阻塞式监听 Socket accept() 监听连接套接字并接受它。
- 3.io操作
- 4.关闭
public static void main(String[] args) throws IOException {
System.out.println("-------------Server-----------");
//1.定义服务端
ServerSocket server=new ServerSocket(7777);
//2.阻塞式监听 Socket accept()
Socket client=server.accept();
//3.io操作
DataInputStream in=new DataInputStream( client.getInputStream());
String str=in.readUTF();
System.out.println(str);
//4.关闭
in.close();
client.close();
server.close();
}