IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 第九章-网络编程 -> 正文阅读

[网络协议]第九章-网络编程

1、网络编程概述

把分布在不同地理区域的具有独立功能的计算机,通过通信设备,网线连接起来,实现在不同计算机之间的资源共享、信息互通。
程序员面对的是一个统一的网络编程环境,java是Internet上的语言。我们所编写的程序具备网络间进行信息传递,java是支持网络通信。将底层实现细节封装起来。
网络通信协议
吧vvvvvvvv
物理层和数据链路层 涉及物理介质访问和二进制数据流传输。
网络层的主要涉及寻址和路由选择。
传输层的基本功能由两台主机间的应用程序提供端到端的通信。从应用层接受数据,必要时会把它分为小单元,传递给网络层,并确保到达对方的各段信息正确无误。
应用层提供应用程序的网络接口。

数据封装与数据拆封
在这里插入图片描述
如何实现网络中的主机互相通信:
通信双方地址
一定的规则

2、通讯要素:IP 和端口号

1、如何找到计算机网络中的某台主机ip
在“cmd”中,在输入“ipconfig /all”
2、找到主机后,如何安全高效的进行数据传输(通信协议)
IP:计算机地址
分类方式1:IPV4 和IPV6
分类方式2:公网地址(万维网使用)和 私有地址(局域网使用),192.168.
端口号:给计算机上运行的程序分配的编号—端口号(不重复)
Tomcat 占用端口8080,MySql占用端口 3306,Oracle 占用端口1521等
端口号与IP地址的组合得出一个网络套接字

3、InetAddress类

Internet上的主机有两种方式表示地址:
域名(hostName):www.baidu.com
IP地址(hostAddress):220.181.111.37
inetAddress类主要表示IP地址 ,两个子类:Inet4Address、Inet6Address
InetAddress 类对象含有一个 Internet 主机地址的域名和IP地址:www.baidu.com和 220.181.111.37
域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化为IP地址,这样才能与主机建立连接 ---- 域名解析

4、通讯要素:网络通信协议

在通信过程中双方定义的一系列规则,例如:传输的速率、代码、代码结构、出错控制等制定标准。
传输层协议: 传输控制协议TCP(Transmission Control Protocol)
用户数据报协议UDP(User Datagram Protocol)

TCP: 面向连接,通信之前,要先建立连接。(聊天)三次握手,四次挥手。
UDP:无连接,每个数据报的大小限制在64k内,不可靠,结束不需要释放资源,速度快(发射导弹,具体的位置输入到导弹)
在这里插入图片描述

5、Socket

1、通信两端都要有Socket,是两台机器间通信的端点
2、网络通信就是Socket间的通信
3、Socket允许程序把网络连接成一个流,数据在两个Socket间通过IO传输
Socket类 (套接字:包含服务器IP+端口)
ServerSocket(提供服务)
基于TCP协议的数据传输
在这里插入图片描述

package com.ff.java.day1;

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

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        //1、创建服务器
        // 发送请求
        //监听有没有客户端连接到服务器,连接到后并返回客户端,socket对象,如果一直没有客户端连接,一直阻塞等待
        ServerSocket ss=new ServerSocket(9560);
        System.out.println("请求连接");
        Socket serversocket=ss.accept();
        System.out.println("连接成功");

        //4、接收请求
        InputStream ins=serversocket.getInputStream();
        byte[] b=new byte[100];
        int length=ins.read(b);
        String w=new String(b,0,length,"utf-8");
        System.out.println(w);



    }

}

在这里插入图片描述

package com.ff.java.day1;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class ClientDemo {

    public static void main(String[] args) throws IOException {
        //2创建客户端 socket 创建三次握手,检测网络是否通畅,不通畅报错
        Socket sss=new Socket("127.0.0.1",9560);

        //3获得输出流对象,并向服务器发送数据;在网络中以流的形式发送数据到服务器
        OutputStream out =sss.getOutputStream();
        out.write("你好".getBytes("utf-8"));

    }
}

package com.ff.java.day2;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(9966);
        while (true){
            Socket socket=serverSocket.accept();//监听 阻塞式 有客户端连接到继续向下
            System.out.println("服务端:");
            OutputStream out =socket.getOutputStream();
            InputStream in =socket.getInputStream();
            DataOutputStream dataOutputStream=new DataOutputStream(out);
            DataInputStream dataInputStream =new DataInputStream(in);
            Scanner scanner =new Scanner(System.in);
            while (true){

        String s2= dataInputStream.readUTF();
                System.out.println("读取客户端:"+s2);

                String s1 =scanner.next();
            dataOutputStream.writeUTF(s1);
               // System.out.println(s1);

            }
        }
    }
}

package com.ff.java.day2;

import javax.print.DocFlavor;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",9966);
        OutputStream out =socket.getOutputStream();
        InputStream in =socket.getInputStream();
        DataOutputStream dataOutputStream=new DataOutputStream(out);
        DataInputStream dataInputStream =new DataInputStream(in);
        Scanner ss=new Scanner(System.in);
        while (true){
            System.out.println("客户端");
            String s =ss.next();
            dataOutputStream.writeUTF(s);

            String q =dataInputStream.readUTF();
            System.out.println("读取服务端:"+q);

        }
    }
}

6、UDP

系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达
发送端与接收端是两个独立的运行程序

package com.ff.java.da;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Server {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket =new DatagramSocket(9966);
        byte [] b=new byte[100];
       while (true){
           DatagramPacket datagramPacket =new DatagramPacket(b,b.length);
           datagramSocket.receive(datagramPacket);
           String s =new String(b);
           System.out.println(s);
       }
    }
}

package com.ff.java.da;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.*;

public class Client {
    public static void main(String[] args) throws IOException {
        //发送端socket
         datagramSocket =new DatagramSocket();
    while (true){
        String s="客户端:你好";
        byte [] b =s.getBytes("utf-8");
        DatagramPacket datagramPacket =new DatagramPacket(b,b.length,InetAddress.getByName("127.0.0.1"),9966);
        datagramSocket.send(datagramPacket);
    }
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 13:06:15  更:2021-07-30 13:07:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 18:46:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码