我是靠谱客的博主 精明台灯,最近开发中收集的这篇文章主要介绍Java网络编程:TCP,UDP,sock编程第一节 网络基础知识InetAddress类第二节 Java UDP编程第三节 Java TCP 编程URL类第四节 Java HTTP 编程其他,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第一节 网络基础知识

常用的通信协议

MAC地址:(Media Access Control Address,媒体存取控制位址),
IP:(Internet Protocol,网际协议)
UDP:(User Datagram Protocol,用户数据报协议)
TCP:(Transmission Control Protocol,传输控制协议)
HTTP协议:(Hyper Text Transfer Protocol,超文本传输协议)
FTP: (File Transfer Protocol,文件传输协议)
SMTP: (Simple Mail Transfer Protocol,简单邮件传输协议)
POP3/IMAP
POP3:(Post Office Protocol-Version3 邮件协议版本3)
IMAP:(Internet Message Access Protocol 消息访问协议)

① mac地址:
每个计算设备上都有若干个网卡
每个网卡上有(全球唯一)单独的硬件地址,MAC地址

② IP地址:
IP地址:每个网卡/机器都有一个或多个IP地址
IPV4:192.168.0.100,每段从0到255
IPV6: 128bit长,分成8段,每段4个16进制数
• FE80:0000:0000:0000:AAAA:0000:00C2:0002
• https://baike.baidu.com/item/IPv6/172297?fr=aladdin
– 查询:Windows平台ipconfig, Linux/Mac平台ifconfig
为实现网络通信,每台电脑必须有一个与众不同的标识,这就是IP地址,由32位(4段8位)的二进制数组成。格式:76.73.91.155

• 保留ip:127.0.0.1 本机
• 公网(万维网/互联网)和内网(局域网)
– 网络是分层的
– 最外层是公网/互联网
– 底下的每层都是内网
– ip地址可以在每个层次的网重用
– tracert 看当前机器和目标机器的访问中继
在这里插入图片描述
③ 通讯协议:TCP和UDP
• TCP:Transmission Control Protocol
– 传输控制协议,面向连接的协议
– 两台机器的可靠无差错的数据传输
双向字节流传递

• UDP: User Datagram Protocol
– 用户数据报协议,面向无连接协议
不保证可靠的数据传输
– 速度快,也可以在较差网络下使用

④域名(Domain Address):
为了便于记忆纯数字的IP地址而采用的一种字符串形式的域名地址来标识网络上的机器。如:

⑤ 端口(Port):
• port:端口,0-65535
– 0~1023, OS已经占用了,80是Web,23是telnet
– 1024~65535,一般程序可使用(谨防冲突)
• 两台机器通讯就是在IP+Port上进行的
• 在Windows/Linux/Mac上都可以通过netstat -an来查询

⑥URL:
URL(Uniform Resource Locator):统一资源定位器,用于表示Internet上资源的地址
URL一般由协议名、资源所在的主机名和资源名等部分组成。如:
http:// xueyuan.zhbit.com / computer/Article1.html

对应URL
就是URL的后半段即统一资源标识(computer/Article1.html )URI(Uniform Resource Indicator)
http协议名
xueyuan.zhbit.com主机名

两台机器通讯就是在IP+Port上进行的

InetAddress类

  • InetAddress类没有提供公共的构造器,而是提供了如下几个静态方法来获取InetAddress实例
    public static InetAddress getLocalHost()
    public static InetAddress getByName(String host)

  • InetAddress提供了如下几个常用的方法
    public String getHostAddress():返回 IP 地址字符串(以文本表现形式)。
    public String getHostName():获取此 IP 地址的主机名
    public boolean isReachable(int timeout):测试是否可以达到该地址

 InetAddress inet1 = InetAddress.getByName("192.168.10.14");
            System.out.println(inet1);
            InetAddress inet2 = InetAddress.getByName("www.atguigu.com");
            System.out.println(inet2);
           //getHostName()
            System.out.println(inet2.getHostName());
            //getHostAddress()
            System.out.println(inet2.getHostAddress());

第二节 Java UDP编程

计算机通讯:数据从一个IP的port出发(发送方),运输到另外一个IP的port(接收方
• UDP:无连接无状态的通讯协议,
– 发送方发送消息,如果接收方刚好在目的地,则可以接受。如果不在,那这个消息就丢失了
– 发送方也无法得知是否发送成功
– UDP的好处就是简单,节省,经济

连接方法
DatagramSocket:通讯的数据管道
– send 和receive方法
– (可选,多网卡)绑定一个IP和Port
DatagramPacket
– 集装箱:封装数据
– 地址标签:目的地IP+Port
• 实例
– 无主次之分
– 接收方必须早于发起方执行
在这里插入图片描述
代码(1) UdpRecv.java
在这里插入图片描述
代码(2) UdpSend.java
在这里插入图片描述

第三节 Java TCP 编程

TCP协议:有链接、保证可靠的无误差通讯
– ①服务器:创建一个ServerSocket,等待连接
– ②客户机:创建一个Socket,连接到服务器
– ③服务器:ServerSocket接收到连接,创建一个Socket和客户的
Socket建立专线连接,后续服务器和客户机的对话(这一对Socket)
会在一个单独的线程(服务器端)上运行
– ④服务器的ServerSocket继续等待连接,返回①

软件服务器有两个要求:
1)它能够实现一定的功能
2)它必须在一个公开地址上对外提供服务。

ServerSocket: 服务器码头(门口的礼仪小姐)
– 需要绑定port
– 如果有多块网卡,需要绑定一个IP地址

Socket: 运输通道(通道)
– 客户端需要绑定服务器的地址和Port
– 客户端往Socket输入流写入数据,送到服务端
– 客户端从Socket输出流取服务器端过来的数据
– 服务端反之亦然

Socket编程
1.两个进程间可以通过一个双向的网络通信连接实现数据交换,这种通信链路的端点被称为套接字(Socket)。
2.套接字分为服务器套接字(Server Socket)和客户端套接字(Client Socket)
3.Socket通常用来实现Client-Server连接,所需信息:
① 远程计算机的机器名或IP地址
② 试图连接的端口号(Port Number)
4.java.net包中定义的两个类Socket和ServerSocket 分别用来实现双向连接的Client和Server端。

ServerClient
ServerSocket s(port #)Socket s(host,port #)
s.accept()等待连接Socket() 主动发起连接
OutputStreamOutputStream
InputStreamInputStream
socket.close()socket.close()

服务端的输出流,就是客户端的输入流,客户端的输出流,就是服务端的输入流

规则:
服务端等待响应时,处于阻塞状态
• 服务端可以同时响应多个客户端
• 服务端每接受一个客户端,就启动一个独立的线程与之对应
• 客户端或者服务端都可以选择关闭这对Socket的通道
• 实例
– 服务端先启动,且一直保留
– 客户端后启动,可以先退出

Socket建立连接的基本步骤

1.建立网络连接
2.打开连接到Socket的输入/输出流
3.通过已打开的I/O流进行数据读写操作
4.关闭已打开的I/O流和Socket
5.全过程进行异常捕获

Socket服务器端编程(工作过程包含以下四个基本的步骤):

  1. 调用 ServerSocket(int port) :创建一个服务器端套接字,并绑定到指定端口上。用于监听客户端的请求。
  2. 调用 accept():监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字对象
  3. 调用 该Socket类对象的 getOutputStream() 和 getInputStream ():获取输出流和输入流,开始网络数据的发送和接收。
  4. 关闭ServerSocket和Socket对象:客户端访问结束,关闭通信套接字
try {
	//创建服务端口的Socket
	ServerSocket s = new ServerSocket(8888);
	//等待客户端发出的连接请求
	Socket st = s.accept();
	//创建输出流
	OutputStream os = st.getOutputStream();
	DataOutputStream dos = new DataOutputStream(os);
	dos.writeUTF(“写给客户端的信息"); //向客户端输出信息
	dos.close(); //关闭输出流
	st.close(); //关闭输出流
}catch (IOException e) {
	e.printStackTrace();		
}

Socket客户器端编程(工作过程包含以下四个基本的步骤:)

  1. 创建Socket:根据指定服务端的 IP 地址或端口号构造 Socket类对象。若服务器端响应,则建立客户端到服务器的通信线路。若连接失败,会出现异常
  2. 打开连接到Socket 的输入/出流:使用 getInputStream()方法获得输入流,使用getOutputStream()方法获得输出流,进行数据传输
  3. 按照一定的协议对Socket 进行读/写操作:通过输入流读取服务器放入线路的信息(但不能读取自己放入线路的信息),通过输出流将信息写入线程。
  4. 关闭Socket:断开客户端到服务器的连接,释放线路
try {
	//创建客户端口的Socket
	Socket st = new Socket("127.0.0.1", 8888);
	//创建监听服务器端的输入流
	InputStream is = st.getInputStream();
	DataInputStream dis = new DataInputStream(is);
	//读出服务器端发出的信息
	System.out.println(dis.readUTF());
	dis.close(); //关闭输出流
	st.close(); //关闭输出流
}catch (IOException e) {
	e.printStackTrace();
}

URL类

概念

  • URL(Uniform Resource Locator):统一资源定位符,它表示 Internet 上某一资源的地址。

  • 它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

  • 通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。

构造器

  • 为了表示URL,java.net 中实现了类 URL。我们可以通过下面的构造器来初始化一个 URL 对象:
    public URL (String spec):通过一个表示URL地址的字符串可以构造一个URL对象
    例如:URL url = new URL ("http://www. atguigu.com/");
    public URL(URL context, String spec):通过基 URL 和相对 URL 构造一个 URL 对象
    例如:URL downloadUrl = new URL(url, “download.html")
    public URL(String protocol, String host, String file);
    例如:new URL("http","www.atguigu.com", “download. html");
    public URL(String protocol, String host, int port, String file); 例如: URL gamelan = new URL(“http”, "www.atguigu.com", 80, “download.html");

URL类的构造器都声明抛出非运行时异常,必须要对这一异常进行处理,通常是用 try-catch 语句进行捕获。

方法

项目Value
public String getProtocol( )获取该URL的协议名
public String getHost( )获取该URL的主机名
public String getPort( )获取该URL的端口号
public String getPath( )获取该URL的文件路径
public String getFile( )获取该URL的文件名
public String getQuery( )获取该URL的查询名

第四节 Java HTTP 编程

了解一下
jdk11有HTTP相关的类了

• http://www.ecnu.edu.cn/index.html?a=1&b=2&c=3

• http:// 协议名
www.ecnu.edu.cn 域名
index.html 资源文件名字
?a=1&b=2&c=3 提供给资源文件的参数根据资源文件的参数不同,资源文件返回的也不同
?后面都是算参数

URLConnection类

• 获取资源的连接器
• 若希望输出数据,例如向服务器端的 CGI (公共网关接口-Common Gateway Interface-的简称,是用户浏览器和服务器端的应用程序进行连接的接口)程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用URLConnection 。
• 根据URL的openConnection()方法获得URLConnection
• connect方法,建立和资源的联系通道
• getInputStream方法,获取资源的内容

• URLConnection:表示到URL所引用的远程对象的连接。当与一个URL建立连接时,首先要在一个 URL 对象上通过方法 openConnection()生成对应的 URLConnection对象。如果连接过程失败,将产生IOException.代码案例如下:
URL netchinaren = new URL (“http://www.atguigu.com/index.shtml”);
URLConnectonn u = netchinaren.openConnection( );

HTTP状态返回码:

200,请求成功;
404,请求失败;
500,服务器错误;

访问方式

– GET:从服务器获取资源到客户端(
– POST:从客户端向服务器发送数据(

– PUT:上传文件
– DELETE:删除文件
– HEAD:报文头部
– OPTIONS:询问支持的方法
– TRACE:追踪路径
– CONNECT:用隧道协议连接代理

代码案例

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class URLTest1 {

    public static void main(String[] args) {

        HttpURLConnection urlConnection = null;
        InputStream is = null;
        FileOutputStream fos = null;
        try {
            URL url = new URL("http://localhost:8080/examples/beauty.jpg");

            urlConnection = (HttpURLConnection) url.openConnection();

            urlConnection.connect();

            is = urlConnection.getInputStream();
            fos = new FileOutputStream("day10\beauty3.jpg");

            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }

            System.out.println("下载完成");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
        }


    }
}

其他

URI、URL和URN的区别
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。

最后

以上就是精明台灯为你收集整理的Java网络编程:TCP,UDP,sock编程第一节 网络基础知识InetAddress类第二节 Java UDP编程第三节 Java TCP 编程URL类第四节 Java HTTP 编程其他的全部内容,希望文章能够帮你解决Java网络编程:TCP,UDP,sock编程第一节 网络基础知识InetAddress类第二节 Java UDP编程第三节 Java TCP 编程URL类第四节 Java HTTP 编程其他所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部