网络编程

网络编程

定义: 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

IP & 域名

IP: 定位网络中的不同节点(电子设备:手机,电脑,路由器…)

互联网协议版本字节数位数
IPV44个字节32位
IPV616个字节128位
特殊的IP:

192.168.0.0~192.168.255.255 局域网内部使用

本地IP

127.0.0.1

本地域名

localhost

DNS域名解析服务器

DNS 把域名翻译成IP地址的软件称为域名系统,即DNS。

InetAddress 此类表示互联网协议 (IP) 地址。

端口

端口: 区分不同软件
0~65535 2个字节
统一协议下端口不能冲突
设置端口号时尽量越大越好
预留端口号:8000

常见端口号:

端口号对应地址
80http
8080tomcat
1521Oracle
3306mysql

InetSocketAddress 此类实现 IP 套接字地址(IP 地址 + 端口号)。


互联网的三大基石: http html url

HTTP
(HyperText Transfer Protocol,超文本传输协议)

html
超文本标记语言

URL
(Uniform Resource Locator,统一资源定位符) 区分不同的资源

完整网址示例解析:
https://www.baidu.com:80/img/bd_logo1.png

符号意义
https://协议
www.baidu.com域名
:80端口
img/bd_logo1.png资源地址
?xxx请求参数

java.net中的常见两种协议支持

udp (用户数据报协议)
UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。

tcp(传输控制协议)
TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。

TCP和UDP的比较

UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

Socket 编程:

  • 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。
  • 当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。
  • java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:
  1. 服务器实例化一个 ServerSocket 对象,表示通过服务器上的 端口通信
  2. 服务器调用 ServerSocket 类的 accept() 方法,该方法将一 直 等待,直到客户端连接到服务器上给定的端口。
  3. 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。
  4. Socket 类的构造函数试图将客户端连接到指定的服务器和 端口号。如果通信被建立,则在客户端创建一个 Socket 对象能 够与服务器进行通信。
  5. 在服务器端,accept() 方法返回服务器上一个新的 socket 引 用,该 socket 连接到客户端的 socket。

连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。

TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.以下是一些类提供的一套完整的有用的方法来实现 socket。

本机 ip 套接字 url 相关代码

ip
/*
* getHostName() 获取此 IP 地址的主机名。 
* getHostAddress() 返回 IP 地址字符串(以文本表现形式)。
* getAddress() 返回此 InetAddress 对象的原始 IP 地址。
 */
InetAddress i = InetAddress.getLocalHost();
System.out.println(i);// LAPTOP-9G6E024B/192.168.1.110
System.out.println(i.getHostName());// LAPTOP-9G6E024B
System.out.println(i.getHostAddress());// 192.168.1.110
InetAddress i2 = InetAddress.getByName("www.baidu.com");
System.out.println(i2);// www.baidu.com/115.239.211.112
System.out.println(i2.getHostName());// www.baidu.com
System.out.println(i2.getHostAddress());// 115.239.211.112
套接字
/*
* 端口:
*  InetSocketAddress(InetAddress addr, int port) 
 根据 IP 地址和端口号创建套接字地址。 
InetSocketAddress(int port) 
创建套接字地址,其中 IP 地址为通配符地址,端口号为指定值。 
InetSocketAddress(String hostname, int port) 
根据主机名和端口号创建套接字地址。 
 */
InetSocketAddress add1=new InetSocketAddress(i,9999);
System.out.println(add1.getHostName());  //LAPTOP-9G6E024B
System.out.println(add1.getPort());  //9999		
InetSocketAddress add2=new InetSocketAddress("115.239.211.112",9999);
System.out.println(add2.getHostName());  //115.239.211.112
System.out.println(add2.getPort());   //9999
url
//url
URL url=new URL("http://www.baidu.com:80/index.html?name=zhangsan&pwd=123#a");
		System.out.println(url);
		System.out.println("协议:"+url.getProtocol());//http
		System.out.println("域名:"+url.getHost());//www.baidu.com
		System.out.println("端口:"+url.getPort());//80
		System.out.println("资源:"+url.getFile());//文件名  //  /index.html?name=zhangsan&pwd=123
		System.out.println("资源:"+url.getPath());//路径部分 // /index.html
		System.out.println("查询:"+url.getQuery());//name=zhangsan&pwd=123
		System.out.println("锚点:"+url.getRef());//a
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值