网络编程三要素
网络编程三要素:
A:IP地址 B:端口 C:协议
举例:
我想和林青霞说话了。肿么办?
A:我要找到林青霞。
B:对她说话,要对耳朵说。
C:我说什么呢?"I Love You"
但是,她没学过英语,听不懂。我没必要说英语,说汉语就可以了:我爱你
(1)IP地址
网络中计算机的唯一标识。计算机只能识别二进制的数据,所以我们的IP地址应该是一个二进制的数据。但是呢,我们配置的IP地址确不是二进制的,
为什么呢?
IP:192.168.1.100
换算:11000000 10101000 00000001 01100100
假如真是:11000000 10101000 00000001 01100100的话。
我们如果每次再上课的时候要配置该IP地址,记忆起来就比较的麻烦。
所以,为了方便表示IP地址,我们就把IP地址的每一个字节上的数据换算成十进制,然后用.分开来表示:"点分十进制"
P地址的组成
网络号段+主机号段
- A类:第一号段为网络号段+后三段的主机号段
一个网络号:256 * 256 * 256 = 16777216
- B类:前二号段为网络号段+后二段的主机号段
一个网络号:256 * 256 = 65536
- C类:前三号段为网络号段+后一段的主机号段
一个网络号:256
IP地址的分类
-
A类 1.0.0.1---127.255.255.254
(1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址)
(2)127.X.X.X是保留地址,用做循环测试用的。
-
B类 128.0.0.1---191.255.255.254
172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
- C类 192.0.0.1---223.255.255.254
192.168.X.X是私有地址
- D类 224.0.0.1---239.255.255.254
- E类 240.0.0.1---247.255.255.254
两个DOS命令:
ipconfig 查看本机ip地址
ping 后面跟ip地址。测试本机与指定的ip地址间的通信是否有问题
特殊的IP地址:
127.0.0.1 回环地址(表示本机 localhost)
x.x.x.255 广播地址
x.x.x.0 网络地址
在Java中的类
java.lang.Object
继承者 java.net.InetAddress
public class InetAddress extends Object implements Serializable
InetAddress类速查速记:
概述:
要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,
通过这个标识号来指定要接受数据的计算机和识别发送的计算机,
在TCP/IP协议中,这个标识号就是IP地址。
那么,我们如果获取和操作IP地址呢?
为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用。
构造方法:(无)
- 此类没有构造方法,是通过静态方法getByName()*获取对象的*
* public static InetAddress getByName(String host):
* 根据主机名或者IP地址的字符串表示得到IP地址对象
* 如果一个类没有构造方法:
* A:成员全部是静态的(Math,Arrays,Collections)
* B:单例设计模式(Runtime)
* C:类中有静态方法返回该类的对象(InetAddress)
* class Demo {
* private Demo(){}
*
* public static Demo getXxx() {
* return new Demo();
* }
* }
成员方法:(除了上面那个以外的)
* 看InetAddress的成员方法:
* public String getHostName():获取InetAddress对象的主机名
* public String getHostAddress():获取InetAddress对象的IP地址
// public static InetAddress getByName(String host)
InetAddress address1 = InetAddress.getByName("liuyi");
InetAddress address = InetAddress.getByName("192.168.12.63");
// 获取两个东西:主机名,IP地址
String name = address.getHostName();
String ip = address.getHostAddress();
System.out.println(name + "---" + ip);
InetAddress类:
演示1:
package cn.itcast_01;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
* 如果一个类没有构造方法:
* A:成员全部是静态的(Math,Arrays,Collections)
* B:单例设计模式(Runtime)
* C:类中有静态方法返回该类的对象(InetAddress)
* class Demo {
* private Demo(){}
*
* public static Demo getXxx() {
* return new Demo();
* }
* }
*
* 看InetAddress的成员方法:
* public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象
*/
public class InetAddressDemo {
public static void main(String[] args) throws UnknownHostException {
// public static InetAddress getByName(String host)
// InetAddress address = InetAddress.getByName("liuyi");
// InetAddress address = InetAddress.getByName("192.168.12.92");
InetAddress address = InetAddress.getByName("192.168.12.63");
// 获取两个东西:主机名,IP地址
// public String getHostName()
String name = address.getHostName();
// public String getHostAddress()
String ip = address.getHostAddress();
System.out.println(name + "---" + ip);
}
(2)端口号
-
端口表示计算机上正在运行的一个程序进程的标识
-
不同的进程有不同的端口号!用来区分软件
-
有效端口:0 ~ 65535,其中 0 ~ 1024系统使用或保留端口。
-
端口分类
-
- 公有端口 0~1023
-
-
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
-
-
- 程序注册端口:1024~49151,分配用户或者程序(一些程序的默认端口)
-
-
- Tomcat:8080
- MySQL:3306
- Oracle:1521
-
-
- 动态、私有:49152~65535
netstat -ano # 查看所有端口
netstat -ano|findstr "8000" # 查看指定端口
tasklist|findstr "29292" # 查看指定端口的进程
Ctrl + Shift + ESC # 可以在任务进程中查看
(3)协议
TCP/IP协议
TCP udp 对比
-
TCP :打电话(类比)
-
- 连接,稳定、
- 三次握手,四次挥手
- 客户端、服务端
- 传输完成,四方连接,效率低
-
udp:发短信(类比)
-
- 无连接,数据不安全,不稳定,****速度快。
- 不区分客户端与服务端
- 发送数据结束时无需释放资源从而速度快
- DDOS:洪水攻击!(饱和攻击)

浙公网安备 33010602011771号