网络编程:第八次实验室周报

本文详细介绍了网络编程的基础概念,包括IP地址、端口、协议等核心元素,对比了TCP与UDP协议的特点,阐述了网络模型及网络应用程序的构成,并提供了网络编程的示例代码。

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

网络编程

网络编程:可以实现多台电脑之间相互通信操作。
在javaEE中,不是特别重要,javaEE中有Web服务器(对线程,Socket,IO做了封装)。
0、协议(TCP/IP,UDP,http,https,ftp,file):
1、IP地址:在互联网上IP地址是唯一的。(IPV4,IPV6)
2、端口:相当于一个程序对外暴露的一扇门,在同一台电脑中端口不能重复:
要访问该程序。
3、HTTP协议重要概念:
1)URI:统一资源的描述符。可以简单理解为:网络地址,比如网址。
2)URL:统一资源定位符。

Java.net包:存放了网络编程相关的类/接口。
IP表示:
InetAddress表示IP地址 :有两个子类
-----Inet4Address:32位,比如:192.168.1.1。
-----Inet6Address:128位,比如:1080:0:0:0:8:800:200C:417A。
无构造方法的几种情况:
1、成员全部是静态的。
2、单例设计模式。
3、类中有静态方法,返回该类的对象。

表示本机的IP地址:127.0.0.1/localhost

网络上的数据的编码和解码操作:
URLEncoder:编码类。
URLDecoder:解码类。
在这里插入图片描述

网络编程上的两种协议
TCP协议:建立通道传输数据,速度慢,需要三次握手来建立连接,比较可靠。不会丢失数据。
UDP协议:把数据打包,数据限制在64K,不建立连接,速度快,会丢失少量数据,不可靠。
在这里插入图片描述

网络模型:计算机网络之间以何种规则进行通信,就是网络模型研究问题。
网络模型一般指:
OSI(开放系统互连)参考模型
TCP / IP参考模型
在这里插入图片描述
在这里插入图片描述

网络应用程序:网络编程、IO流、多线程、集合组成。
网络编程三要素:IP地址(找到电脑)、端口(区分程序)、协议(规则)。
IP地址:网络中计算机的唯一标识。
计算机只能识别二进制数据,所以IP地址应该是一个二进制的数据。
但是我们配置的IP地址不是二进制的,为何?
例如: IP: 192.168.1.100
换算:11000000 10101000 00000001 01100100
但二进制记忆非常麻烦,为了方便表示IP地址,我们就让其换算为十进制,用 . 分开。“点分十进制”。
IP的组成:网络号段+主机号段
A类:第一号段为网络号段+后三段的主机号段
一个网络号:256256256种方法
B类:前二号段位网络号段,后两号段为主机号段
一个网络号:256*256种方法
C类:前三号段位网络号段,后一号段为主机号段
一个网络号:256种方法
私有地址:
192.168.x.x
10.x.x.x
172.16.0.0—172.31.255.255这个区域是私有地址,169.254.x.x是保留地址(不用)
在互联网上不使用,而被用在局域网中的地址。
两个DOS命令:
ipconfig :查看本机IP地址。
ping :后跟IP地址,测试本机与指定的IP地址间的通信是否有问题。

特殊的IP地址:
127.0.0.1回环地址(也可以表示本机)。
x.x.x.255 广播地址。
x.x.x.0 网络地址。

端口:
物理端口:网卡口。
逻辑端口:
1、每个网络程序都会至少有一个逻辑端口。
2、用于标识进程的逻辑地址,不同的进程标识。
3、有效端口:065535,其中01024系统使用或保留端口
本机查看端口号:输入命令 netstat。

Socket:网络套接字。
Socket编程:网络编程,套接字编程。
Socket包含了:IP地址+端口。
Socket原理机制:
1、通信两端都有Socket。
2、网络通信其实就是Socket之间的通信。
3、数据在两个Socket间通过IO传输。

网络编程中客户端与服务端的通信:

public static void main(String[] args) throws IOException {
        Socket client=new Socket("localhost",11000);
        // 读取数据(连接的通道是字节流,我们可以包装字节流)
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
        String line=null;
        while((line=br.readLine())!=null){
            if("886".equals(line)){
                break;
            }
            bw.write(line);
            bw.newLine();
            /*
            为什么要使用newline:
            流.read方法是按字节读取,只判断有没有读取到数据,不管内容的,所以换行符也会被读出来
            而BufferedReader.readLine是按行读取的,即从当前位置一直读取数据,直到遇到换行符,然后去掉换行符,返回读取到的数据
             */
            bw.flush();
        }
        client.close();
    }
 public static void main(String[] args)throws IOException {
        ServerSocket server=new ServerSocket(11000);
        Socket client=server.accept();
        BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
        String line=null;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
        client.close();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值