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>
目录
相关文章
|
2月前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
78 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
2月前
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
3月前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
104 3
|
3月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
4月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
45 0
|
7月前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
88 4
|
7月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
46 3
|
7月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
83 2
|
7月前
|
网络协议 程序员 视频直播
|
7月前
|
消息中间件 网络协议 网络安全
Python Socket编程:打造你的专属网络通道,基础篇与进阶篇一网打尽!
【7月更文挑战第26天】在网络编程领域,Python以简洁语法和强大库支持成为构建应用的首选。Socket编程为核心,实现计算机间的数据交换。
86 1

热门文章

最新文章