Java网络编程(一):基本概念
@author:超爱学习的可琛同学
对于本博客你将学习:
- 什么是网络编程,以及目的。
- 了解IP地址、端口、URL、HTTP的概念。
- 了解UDP和TCP,知道二者区别。
- 熟悉UDP、TCP编程的基本操作。
- 实战:手写聊天室!
1 什么是网络编程?
你是否闲暇时刷刷抖音、逛逛b站、看看博客等,这些无一不需要用到网络编程。可能你之前也听说过B/S架构,C/S架构,而网络编程就是服务于其中;网络OSI五层模型中:
OSI | TCP/IP协议集 |
---|---|
应用层 | Telnet、FTP、DNS、HTTP以及其他应用协议 |
传输层 | TCP、UDP |
网络层 | IP、ARP、ICMP等 |
数据链路层 | 各种通信网络接口(以太网等) |
物理层 | 各种通信网络接口(以太网等) |
2. 了解IP地址、端口、URL、HTTP的概念。
2.1 IP地址:
用来表示网络中的一个通信实体的地址,这个通信实体可以是计算机、路由器等。例如你上网登陆百度、淘宝网站;你会输入:www.baidu.com。这其中使用到了DNS 域名解析协议,会将这些易于人看懂的串:www.baidu.com解析成一个IP地址,这样你才可以定位到百度网站!
特殊的IP:
127.0.0.1:表示本地址;
192.168.0.0-192.168.255.255:私有地址,属于非注册地址,专门为组织机构内部使用,如家庭常用的路由器地址192.168.0.1
package edu.hue.jk;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
*
* InetAddress:
* 1.getLocalHost():获取本机
* 2.getByName:根据域名->ip 或 ip->域名
*
* 两个成员方法:
* 1.getHostAddress();//返回地址
* 2.getHostName();//返回主机名
*
* @author 超爱学习的可琛同学.QQ:1126140903
*
*/
public class IPTest {
public static void main(String[] args) throws UnknownHostException {
//使用getgetLocalHost()方法创建InetAddress对象 :本机
InetAddress address = InetAddress.getLocalHost();
System.out.println(address.getHostAddress());//返回本机IP
System.out.println(address.getHostName());//计算机名
//根据域名得到InetAddress对象
address = InetAddress.getByName("www.baidu.com");
System.out.println(address.getHostAddress());//返回ip:39.156.66.18
System.out.println(address.getHostName());//输出:www.baidu.com
//根据IP得到InetAddress对象
address = InetAddress.getByName("39.156.66.18");
System.out.println(address.getHostAddress());//输出:39.156.66.18
System.out.println(address.getHostName()); //输出 39.156.66.18 而不是www.baidu.com是由于没有权限
}
}
2.2 端口:
通过IP找一台计算机,那通过什么找这台计算机应用程序呢?答案就是:端口;它的取值在:0-65535。
Oracle、MySQL、Tomcat、迅雷、360等网络程序都有自己的端口。
- 公认端口:0-1023 比如80端口分配给WWW,21端口给FTP;
- 注册端口:1024-49151 分配给用户进程或应用程序
- 动态/私有端口: 49152-65535
另一些你需要知道的东西:
运行框->cmd:
- 查看所有端口:netstat -ano
- 查看指定端口:netstat -aon|findstr “3306”
- 查看制定进程:tasklist|findstr “2106”
- 查看具体程序:Ctrl+Alt+Del 快捷任务管理器,查找PID
package edu.hue.jk;
import java.net.InetSocketAddress;
/**
* 1.端口:区分软件
* 2.同一协议端口不能冲突
* 3.定义端口越大越好
* 方法: getHostName()、getAddress()、getPort()
* @author 超爱学习的可琛同学 .QQ1126140903
*
*/
public class PortTest {
public static void main(String[] args) {
// TODO 自动生成的方法存根
InetSocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 8888);
InetSocketAddress socketAddress2 = new InetSocketAddress("localhost", 9999);
System.out.println(socketAddress.getHostName());//127.0.0.1
System.out.println(socketAddress2.getHostName());//localhost
System.out.println(socketAddress.getAddress());//127.0.0.1/127.0.0.1
System.out.println(socketAddress2.getAddress());//localhost/127.0.0.1
System.out.println(socketAddress.getPort());//8888
System.out.println(socketAddress2.getPort());//9999
}
}