网络编程
1.1概述
计算机网络:
计算机网络是指将==地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来==,在网络操作系统,网络管理软件及==网络通信协议==的管理和协调下,实现**资源共享和信息传递**的计算机系统。
连接起来多电脑—通信协议—资源共享
网络编程的目的:
无线电台…传播交流信息,数据交换。通信
想要达到这个效果需要什么:
- 如何准确的定位网络上的一台主机 192.168.16.124:端口,定位到这个计算机上的某个资源
- 找到了这个主机,如何传输数据呢?
javaweb:网页编程 **B/S结构(**Browser/Server,浏览器/服务器模式)
网络编程:TCP/IP C/S 服务器-客户机,即Client-Server
1.2网络通信的要素
如何实现网络的通信?
通信双方地址:
- ip
- 端口号
- 需要规则 通信协议
1.3IP
-
IP地址:InetAddress,唯一定位网络上的计算机;
-
本机 localhost:127.0.0.1。
-
ip地址分类:ipv4/ipv6
-
Ipv4:127.0.0.1,4个字节组成,0-255 约42亿个;亚洲4亿,2011年用尽。
-
Ipv6:fe80::40c5:1492:3aa9:db4b%11 128位,8个无符号整数。
-
公网(互联网),私网(局域网):ABCD类地址 192.168.xx.xx专门给组织内部使用的
-
一、冒分十六进制表示法
格式为X:X:X:X:X:X:X:X,其中X表示地址中16位二进制数的十六进制值例如:
ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
这种表示法中,每个X的前导0是可以省略的,例如:
2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A
import java.net.InetAddress;
import java.net.UnknownHostException;
//测试ip
public class TestInetAddress {
public static void main(String[] args) {
try {
//查询本机ip地址
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
System.out.println(inetAddress);
InetAddress inetAddress3 = InetAddress.getByName("localhost");
System.out.println(inetAddress);
InetAddress inetAddress4 = InetAddress.getLocalHost();
System.out.println(inetAddress);
//查询百度ip地址
InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");
System.out.println(inetAddress2);
//常用方法
//System.out.println(inetAddress2.getAddress());
System.out.println(inetAddress2.getCanonicalHostName());//规范的名字
System.out.println(inetAddress2.getHostAddress());//ip
System.out.println(inetAddress2.getHostName());//域名 或者自己电脑的名字
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
1.4端口
端口port表示计算机上一个程序 的进程:
- 不同的进程有不同的端口号用来区分软件。
- 端口被规定0-65535个。
- TCP/UDP:65535*2个 单个协议下端口号不能冲突。
- 端口分类
- 公有端口:0~1023(尽量不要用,一般给内置进程或服务器使用)
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
- 程序注册端口:1024~49151,分配给用户或者程序。
- Tomcat:8080
- MySQL:3306
- Oracle:1521
- 动态,私有:49152~65535
- 公有端口:0~1023(尽量不要用,一般给内置进程或服务器使用)
CMD
1. netstat -ano #查看所有的端口
2. netstat -ano|findstr "5900" #查看指定的端口
3. tasklist|findstr "8696" #查看指定端口的进程
4. Ctrl+shift+Esc #打开任务管理器
import java.net.InetSocketAddress;
public class TestInetSocketAddress {
public static void main(String[] args) {
//查询本机地址
InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8080);
InetSocketAddress socketAddress1 = new InetSocketAddress("localhost", 8080);
System.out.println(socketAddress);
System.out.println(socketAddress1);
System.out.println(socketAddress.getAddress());
System.out.println(socketAddress.getHostName()); //地址
System.out.println(socketAddress.getPort()); //端口
}
1.5通信协议
网络通信协议:速率,传输码率,代码结构,传输控制。
TCP/IP协议簇:实际上是一组协议
重要:
- TCP:用户传输协议
- UDP:用户数据报协议
- IP:网络互联协议
TCP/UDP对比
TCP:打电话
- 连接,稳定
- 三次握手,四次挥手
- 客户端,服务端,传输完成释放连接,效率低
UDP:发短信
- 不连接,不稳定
- 客户端,服务端,没有明确的界限
- 不管有没有准备好,都可以发送
- DDOS:洪水攻击!(饱和攻击)
1.6TCP
- 客户端
- 连接服务器 Socket
- 发送信息
- 服务器端
- 建立服务的端口: serverSocket
- 等待用户 连接accept
- 接受客户端的消息
客户端:
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class clientNet {
public static void main(String[] args) {
//输入客户端输入 服务器地址
try {
InetAddress byName = InetAddress.getByName("127.0.0.1");
int p =8888;//端口
Socket socket = new Socket(byName,p);
//发送消息使用 io流
OutputStream os = socket.getOutputStream();
os.write("客户端给服务端发送了一个消息".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java