韩顺平Java自学笔记 网络多线程

本文详细介绍了Java中的网络编程,包括网络相关概念如网络分类、IP地址、域名和端口号、通信协议,重点讲解了TCP和UDP协议。此外,通过Socket编程实例展示了字节流和字符流的使用,以及netstat指令的应用。同时,对TCP协议的秘密和UDP网络编程做了初步理解,并给出了课后作业,涉及多线程的Socket通信实战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一。网络的相关概念

1.网络的分类

 2.ip地址

 3.域名和端口号

 4.网络通信协议

5.tcp和udp协议

 6.重要的方法

二.Socket网络编程

1.使用字节流的形式

 2.依旧是字节流案例

3.案例三,使用字符流

4.使用字符流传递图片

5.netstat指令

 三。通信协议的理解

1。tcp协议的一个小秘密

2.UDP网络编程(了解)

四。课后的作业

1。作业一

2.课后作业二

 3.课后作业三


一。网络的相关概念

1.网络的分类

根据网络覆盖的范围来区分,中国大陆地区就是一个特别大的局域网

 2.ip地址

由于连入联网的设备扩展了(万物互联的概念),由单纯计算机主机可以联网,扩展到了手机,手表,电视等都可以。ipv4的地址不够用,所以扩展出了ipv6。 八个二进制位为一个字节,ipv4占用四个字节,ipv6站十六个字节。

 服务器的ip地址是固定的,一般电脑上网的ip地址是不固定的 。

 3.域名和端口号

因为ip地址不好记忆,所以就用域名代替了ip地址,ip与域名的转换是遵守dns规则的。

如果把你的电脑想成一个客栈,他会有很多的门,不同的门对应不同的服务,别的主机传送来的消息,都会从你的门来给你传入。客栈的门就相当于电脑的端口。

访问网站,是以端口+服务的形式来实现网站的访问的。

端口号一共占有两个字节。 

 一个端口只能绑定一个服务。端口只与网络服务有关。

 4.网络通信协议

先拿人与人之间的交流做比较,语言可以说是一种协议(规范)不遵守,对方就听不懂了。网络之间的信息传输也遵循着一套协议。消息经过固定的格式打包,就像是语言交流当中的语法。(简单解释)

数据封装的过程

 像是快递,要有打包的过程,只有打包过后的程序,才能发送。这是打包,用户解析是反过来的。

数据的解析形式就是协议,协议,把信息准确无误的发送给对方。计算机之间相互沟通的行为规范。

网络通信协议模型

 主要是tcp模型,osi模型太细,区分太细没有意义。

tcp和ip协议是最基础的信息协议,链路是用来增加帧头和帧尾的。如果我们设置 一个信息包的发送,识别规则,那他是建立在tcp,ip协议的基础之上的。

5.tcp和udp协议

传输层两个协议的区别。

tcp:可靠,量大,效率低。

你人比喻模拟

两人打电话,打通了之后,要先确认双方到底能不能互相正确的接收到信息。A说你好之后,B回你好之后,在说明要说事情了,才能确保通话正常。

一班传送数据文件音频。

 udp:不可靠,量小,但是速度快。

直接将信息发送给你,不管你接收不接收,发送给你之后就完事了。

 6.重要的方法

InetAdress当中的一些方法

package com.api;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class API_ {
    public static void main(String[] args) throws UnknownHostException {
//        获得本机的InetAddress对象
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println(localHost);
//      根据指定的主机名获得InetAddress对象
        InetAddress byName = InetAddress.getByName("LAPTOP-D83EFCRR");
        System.out.println(byName);
//      根据域名返回对应的ip
        InetAddress byName1 = InetAddress.getByName("www.baidu.com");
        System.out.println(byName1);
//      通过getHostAddress对象使他获得对应的地址ipv4地址
        String hostAddress = byName1.getHostAddress();
        System.out.println(hostAddress);
//      获取对应的域名
        String hostName = byName1.getHostName();
        System.out.println(hostName);
    }
}

 运行结果

LAPTOP-D83EFCRR/192.168.0.103
LAPTOP-D83EFCRR/192.168.0.103
www.baidu.com/220.181.38.150
220.181.38.150
www.baidu.com

二.Socket网络编程

数据在两个socket当中通过io流进行传播

 一段服务,一段客户。服务端进行监听,客户端进行信息的发送。数据通道两端的插头。

 双向通道,可读可写

Tcp编程和Udp编程都会使用到socket

 

 案例:

1.使用字节流的形式

要求

思路

 服务端处理多个socket的情况

代码

客户端
SocketTCP01Client 

package com.api.socket_;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketTCP01Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);

        System.out.println("客户端Socket返回"+socket.getClass());
//        得到与socket关联的数据通道
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello,server".getBytes());
//        将流关闭
        outputStream.close();
        socket.close();
        System.out.println("客户端关闭");
    }

}

服务端

SocketTCP01Server

package com.api.socket_;


import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketTCP01Server {
    public static void main(String[] args) throws IOException {
//        要求电脑上没有其他程序在监听9999接口
        ServerSocket serverSocket = new ServerSocket(9999);

        System.out.println("服务器在9999端口进行监听");
        //程序阻塞,不再向下执行  如果有客户端socket链接,返回一个socket链接,开始向下执行
        Socket socket = serverSocket.accept();
        System.out.println("客户
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值