java 网络编程(Socket) TCP/UDP 总结案例(1)

简介: java 网络编程(Socket) TCP/UDP 总结案例

网络编程:关注的是底层的数据传输

网页编程:数据的展示


1、基本概念


一、网络:将不同的计算机连接在一起局域网 城域网 互联网


二、地址:Ip地址确定网络上的绝对的地址位置   房子的地址


三、端口号(相当于房门):区分计算机上的软件 相当于房门两个字节0~65535 共65536个


1、 同一个协议下,端口号不能重复,不同的协议下可以重复


2、 1024以下的端口不要使用 80-->http 21-->ftp


四、资源定位 URL 统一资源定位 URI:统一资源


五、数据的传输


1、 协议:TCP和 UDP协议(重点的)


1)、TCP(transfer control protocol):必须先建立连接 先连接在通信 电话 类似于三次握手 面向连接 安全可靠 效率相对低下



2)、UDP(UserDatagramProtocol):类似于发短信 非面向连接 效率高



现在一般是将两者结合使用,底层一些不重要的数据使用UDP传输


2、 传输


1、 先封装


2、 后拆分


image.png




3、数据封装拆分



1、 InetAddress InetSocketAddress


2、 URL


3、 TCP:serverSocket(建立在服务器上)  Socket(建立在客户端上)


4、 UDP: DatagramSocket DatagramPacket


1、InetAddress:封装IP及DNS


方法:


getHostAddress() 返回ip地址


getHostName() 返回域名|本机为计算机名


InetAddress.getLocalHost();//本机


InetAddress.getByName(“IP地址|域名”);


2、InetSocketAddress:封装端口


1):创建对象:


InetSocketAddress(String hostname,int port)


InetSocketAddress(InetAddress addr,intport)


2):方法:


getAdddress()


getHostName()


getPort()

<span style="font-size:18px;">package com.net.ip;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
 * 没有封装端口
 * @author lyy
 *
 */
public class InetDemo1 {
  public static void main(String[] args) throws UnknownHostException {
    //使用getLoaclHost方法创建InetAddress对象
    InetAddress addr = InetAddress.getLocalHost();
    System.out.println(addr.getHostAddress());//返回ip地址
    System.out.println(addr.getHostName());//输入计算机名
    //根据域名得到InetAddress对象
    addr = InetAddress.getByName("www.163.com");
    System.out.println(addr.getHostAddress());//返回服务器的ip地址61.163.117.65
    System.out.println(addr.getHostName()); //输出 www.163.com
    //根据ip得到InetAddress对象
    addr = InetAddress.getByName("61.163.117.65");//如果ip地址存在而且DNS帮你解析了,那么getHostName()这个方法返回的就是www.163.com ,否则输出Ip地址
    System.out.println(addr.getHostAddress());//返回163的服务器的ip
    System.out.println(addr.getHostName());//输入Ip而不是域名,如果这个Ip地址不存在
  }
  </span>
}
<span style="font-size:18px;">package com.net.ip;
import java.net.*;
/**
 * 封装端口:在InetAddress基础上+端口
 * @author lyy
 *
 */
public class InetSocketDemo1 {
    public static void main(String[] args) throws UnknownHostException {
      InetSocketAddress address = new InetSocketAddress("127.0.0.1", 9999);
      address= new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 9999);
      System.out.println(address.getHostName());
      System.out.println(address.getPort());
      InetAddress addr = address.getAddress();
      System.out.println(addr.getHostAddress());//返回ip地址
      System.out.println(addr.getHostName());//输入计算机名
    }
}</span>


3、网络爬虫原理

URI(Uniform resource identifier) 统一资源标识符,用唯一的标识一个资源


URL(Uniform resource Locator)统一资源定位器,他是一种具体的URI


四部分组成:协议存放资源的主机域名端口 资源文件名(/)


URL:


一、创建


URI(String str)//绝对路径构建


URI(URL context,String spec)//相对路径构建


二、方法:


System.out.println("协议:"+url.getProtocol());


System.out.println("域名:"+url.getHost());


System.out.println("端口:"+url.getPort());


System.out.println("资源:"+url.getFile());


System.out.println("相对路径资源:"+url.getPath());


System.out.println("锚点:"+url.getRef());//锚点


System.out.println("参数:"+url.getQuery());//参数:存在锚点回返Null 如果不存在返回参数

<span style="font-size:18px;">package com.net.url;
import java.net.*;
public class URLDemo1 {
  public static void main(String[] args) throws MalformedURLException {
    //绝对路径构建
    URL url = new URL("http://www.baidu.com:80/index.html#aa?uname=lyy");
    System.out.println("协议:"+url.getProtocol());
    System.out.println("域名:"+url.getHost());
    System.out.println("端口:"+url.getPort());
    System.out.println("资源:"+url.getFile());
    System.out.println("相对路径资源:"+url.getPath());
    System.out.println("锚点:"+url.getRef());//锚点
    System.out.println("参数:"+url.getQuery());//参数 :存在锚点 返回Null 如果不存在返回参数
    //相对路径构建
    url = new URL("http://www.baidu.com:80/a/");
    url = new URL(url,"b.txt");//相对路径
    System.out.println(url.toString());
  }
}<strong>
</strong></span>
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
13天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
13天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
1月前
|
移动开发 网络协议 安全
网络面试题:什么是 TCP/IP?
网络面试题:什么是 TCP/IP?
43 0
网络面试题:什么是 TCP/IP?
|
13天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
37 6
|
1月前
|
监控 负载均衡 网络协议
TCP重传与超时机制:解锁网络性能之秘
TCP重传与超时机制:解锁网络性能之秘
64 0
|
5天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
7天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
12天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
16天前
|
网络协议 安全 网络性能优化
|
16天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。