Java提供了网路相关的类库,无痛连网,底层细节交给JVM控制

Java实现了一个跨平台的网络库,我们开发面对的是一个统一的网路编程环境

目的:

直接或者间接的通过网络协议和其他计算机数据交互,通讯

主要问题:

准确定位网络上的一台计算机或者多台,定位主机上的特定的应用

找到主机后如何可靠高效的进行数据传输

通信要素:

IP 和 端口号

TCP/IP协议

IP:是计算机再网络中的唯一标识

本地回环地址;127.0.0.1 主机名:LocalHost

IP地址分类:IPV4 IPV6

v4 - 4字节组成,4个0 - 255 大概42亿总可用,北美30亿,亚洲4亿,2011耗尽,

v6 - 128位 16字节 8个无符号整数,每个整数用4个十六进制位表示,每个数用冒号分隔

按地址分类方式:公网地址【万维网使用】 和私有地址【局域网使用】

192.168.0.0 - 192.168.255.255 为组织机构内部使用

    static void socket01IP_Address() throws UnknownHostException {
// DNS Domain Name System
// localhost/127.0.0.1 本机地址
InetAddress localhost = InetAddress.getByName("localhost");
System.out.println(localhost); InetAddress a = InetAddress.getByName("www.cnblogs.com");
System.out.println(a);
// www.baidu.com/14.215.177.38
// www.acfun.cn/117.21.225.193
// www.bilibili.com/119.3.70.188
// www.cnblogs.com/101.37.113.127 InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost); String address = localHost.getHostAddress();
String hostName = localHost.getHostName(); }

端口号,是计算机上正在运行的进程(程序)

不同的进程不同的端口号

规定为一个16位的整数 0 - 65535

公认端口0 - 1023 预定义的服务通信占用 HTTP 80、FTP 21、Telnet 23

注册端口 1024 - 49151 分配给用户进程或者是应用程序 Tomcat8080、MySQL3306、Oracle1521、

动态端口/ 私有端口 49152 - 65535

套接字 = 端口号 + IP地址

TCP

- 建立连接,形成传输通道,

- 三次握手确认,点对点通信,可靠的

- TCP协议的两个应用进程 客户端、服务器

- 可进行大型数据的传输

- 传输完毕,释放已建立的连接、效率低

UDP

- 数据打包,无连接

- 每个包限制大小64KB

- 无论对方是否准备,接受方是否收到,都没有确认反馈

- 可广播发送

- 发送结束时,无序释放资源,开销小速度快

TCP

public class TCP_Test {
@Test // 服务端
public void server() throws Exception {
// 创建服务器程序
ServerSocket server = new ServerSocket(65000); Socket client = server.accept(); // 表示接受进来的客户端套接字 InputStream inputStream = client.getInputStream(); byte[] bytesBuffer = new byte[512]; int len; while ((len = inputStream.read(bytesBuffer)) != -1){
String str = new String(bytesBuffer,0,len);
System.out.println(str);
} System.out.println("来自服务器的消息:已收到客户端:" + client.getInetAddress().getHostAddress() + " 的消息"); // 关闭资源
inputStream.close();
client.close();
server.close();
} @Test // 客户端
public void client() throws Exception { // 这是要连接对方的socket信息,IP + port
Socket client = new Socket(InetAddress.getByName("localhost"),65000); OutputStream outputStream = client.getOutputStream();
outputStream.write("来自客户端发送的消息: Connect Success!!!".getBytes()); // 流对象释放
outputStream.close(); // 套接字释放
client.close();
}
}

UDP

public class UDP_Test {

    @Test
public void send() throws Exception { DatagramSocket ds = new DatagramSocket(); java.lang.String message = "来自发送器的消息:Hello UDP!!!";
byte[] bytes = message.getBytes();
InetAddress localHost = InetAddress.getLocalHost();
DatagramPacket dp = new DatagramPacket(bytes,0,bytes.length,localHost,65000); // 发送包
ds.send(dp); ds.close();
} @Test
public void receive() throws Exception{
DatagramSocket ds = new DatagramSocket(65000); byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
ds.receive(packet); System.out.println(new String(packet.getData(),0,packet.getLength())); ds.close();
} }

URL

Uniform Resource Locator 统一资源定位符,表示网络的某一资源地址

- 是一种具体的URI,URL可用来标识一个资源,指明如何locate这个资源

- 传输协议 主机名 端口号 文件名 片段名 ?参数列表

一般的端口号就是80

#片段名是锚点,定位到一个具体的部分

参数列表是一个KV对 ?k1=v1这样,如果是多个参数则使用&连接

public class URL_Test {
public static void main(String[] args) throws Exception {
String url = "https://www.ygo-sem.cn/photo/story-430.aspx"; URL url_link = new URL(url); System.out.println("协议名:" + url_link.getProtocol());
System.out.println("主机名:" + url_link.getHost());
System.out.println("端口号:" + url_link.getPort()); // -1 表示未获取到
System.out.println("文件路径:" + url_link.getPath());
System.out.println("文件名:" + url_link.getFile());
System.out.println("查询名:" + url_link.getQuery());
}
}

【Java】Socket Programming 网络编程的更多相关文章

  1. 浅谈JAVA中如何利用socket进行网络编程(二)

    转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  2. 浅谈JAVA中如何利用socket进行网络编程(一)

    转自:http://developer.51cto.com/art/201106/268385.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...

  3. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  4. 黑马程序员:Java基础总结----网络编程

    黑马程序员:Java基础总结 网络编程   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...

  5. Java进阶之网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  6. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  7. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  8. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  9. java第九节 网络编程的基础知识

    /** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...

  10. 20165324 Java实验五 网络编程与安全

    20165324 Java实验五 网络编程与安全 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年5月28日 实 ...

随机推荐

  1. pands基础--数据结构:Series

    从本文开始介绍pandas的相关知识. pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas ...

  2. 使用python批量获取excel的sheet名称

    这个脚本的重用是批量读取excel并获取每个excel的所有sheet名输出到一个文件中. 环境:python 3.7.3 1 # -*- coding:utf-8 -*- 2 3 ''' 4 本代码 ...

  3. web游览器的标签页仿 ios mac 苹果的墓碑机制 (js代码)

    背景: 本来项目开发系统防挂机功能,在其余游览器中均可以使用.但是呢在苹果的safair游览器中会出现几率失效,最后经过排查发现是苹果的墓碑机制导致.即:此标签页活跃,其他标签页假死.然后就导致防挂机 ...

  4. 题目:SHMIP The subglacial hydrology model intercomparison Project

    SHMIP(冰下水文模型比较计划)是一个致力于解决冰下水文多种理论方法问题的项目.该计划通过构建一系列综合模拟实验,并对运行这些模拟的各参与模型的结果进行比较,以达到其目标.这将有助于潜在的模型用户更 ...

  5. 项目管理--PMBOK 读书笔记(7)【项目成本管理】

    1.成本术语: 2.三点估算(PERT): 平均估算值=(最可能持续时间*4+最乐观+最悲观)/6 标准差=(最乐观-最悲观)/6 68.26%.95.46%.99.73% 3.估算成本的工具:质量成 ...

  6. 洛谷 P5595 歌唱比赛

    题目链接:歌唱比赛 思路 根据题目分析可得,假如小x的点赞数是123111,小y的点赞数是234111,则字符串的第4为到第6位结果都为Z,分别为对比(111,111),(11,11),(1,1),字 ...

  7. EasyExcel 无法读取图片?用poi写了一个工具类

    在平时的开发中,经常要开发 Excel 的导入导出功能.一般使用 poi 或者 EasyExcel 开发,使用 poi 做 excel 比较复杂,大部分开发都会使用 EasyExcel 因为一行代码就 ...

  8. 开源一个RAG大模型本地知识库问答机器人

    弹指间,2009年大学毕业到现在2024年,已经15年过去了. 前2天,看到自己14年在博客园写的一个博客,哪个时候是工作之余创业 感兴趣的朋友可以看看我10年前发的一篇博客https://www.c ...

  9. 【论文阅读】RAL2020: UFOMap An Efficient Probabilistic 3D Mapping Framework That Embraces the Unknown

    Last edited time: March 31, 2023 1:30 PM Reference and prenotes Paper link:https://ieeexplore.ieee.o ...

  10. Vue 框架怎么实现对象和数组的监听?

    如果被问到 Vue 怎么实现数据双向绑定,大家肯定都会回答 通过 Object.defineProperty() 对数据进行劫持,但是 Object.defineProperty() 只能对属性进行数 ...