04_网络编程

eCognition易康面向对象分类批量选择样本,批量导出shp 可以的,使用这个工具条最右边那个三角尺manual editing toolbar,这是用来直接指定类别的,咱们可以拿它选完以后把指定的类别转成训练样本。另一个好处是,这个选出来的样本可以直接导出成shp,但select sample是不可以的,只能导出TTAMask也就是栅格掩膜。如果要导出shp,要在转之前导出。中间那条有点点的红线就是我的鼠标轨迹,只要碰到的对象就会全部选中,然后一点3的那个按钮就直接全部划分为林地了,十分丝滑。在弹出来的工作条里,首先选择你的类别,比如这里选一个forest。 阅读详情

网络编程

什么是网络编程

可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)

java.net.* 包下提供了网络编程的解决方案

通信的基本架构
  • CS 架构(Client 客户端 / Server 服务端)
  • BS 架构(Browser 客户端 / Server 服务端)
网络通信三要素
  • IP 地址
  • 端口号
  • 协议
IP 地址
import java.net.InetAddress;

public class Test {
    public static void main(String[] args) throws Exception {
        // 1. 获取本机IP地址对象
        InetAddress ip1 = InetAddress.getLocalHost();
        System.out.println(ip1.getHostName());  // TOMATO
        System.out.println(ip1.getHostAddress());  // 10.233.86.87

        // 2. 获取指定IP或者域名的IP地址对象
        InetAddress ip2 =  InetAddress.getByName("www.baidu.com");
        System.out.println(ip2.getHostName());  // www.baidu.com
        System.out.println(ip2.getHostAddress());  // 120.232.145.185

        // 3. 判断6000毫秒内,是否能够连通百度
        System.out.println(ip2.isReachable(6000));  // true
    }
}
端口号
  • 标记正在计算机设备上运行的应用程序,被规定为一个16位的二进制,范围是 0 ~ 65535
通信协议
  • 网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议
  • UDP(User Datagram Protocol):用户数据报协议;
  • TCP(Transmission Control Protocol):传输控制协议

UDP

  • 特点:无连接,不可靠通信
快速入门
// 客户端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Client {
    public static void main(String[] args) throws Exception {
        // 1. 创建客户端对象
        DatagramSocket socket = new DatagramSocket();

        // 2. 创建数据包对象封装要发出去的数据
        /*
        public DatagramPacket(byte buf[], int length, SocketAddress address) {
            参数一 : 封装要发出去的数据
            参数二 : 发送出去的数据大小(字节个数)
            参数三 : 服务端的IP地址(找到服务端主机)
            参数四 : 服务端的端口
        }
        */
        byte[] bytes = "我是客户端".getBytes();
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
                InetAddress.getLocalHost(), 6666);

        // 3. 开始正式发送这个数据包的数据出来了
        socket.send(packet);
        System.out.println("客户端数据发送完毕!");

        // 4. 关闭连接,释放其所占用的网卡资源
        socket.close();
    }
}
// 服务端

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("---服务端启动---");
        // 1. 创建一个服务端对象
        DatagramSocket socket = new DatagramSocket(6666);  // 参数:端口号

        // 2. 创建一个数据包对象,用于接收数据
        byte[] buffer = new byte[1024 * 64];  // 64KB
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);  // 参数:

        // 3. 正式使用数据包来接收客户端发来的数据
        socket.receive(packet);

        // 客户端ip
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(packet.getPort());

        // 4. 从字节数组中,把接收到的数据直接打印出来
        // 接收多少就倒出多少
        // 获取本次数据包接收了多少数据
        int len = packet.getLength();
        String res = new String(buffer, 0, len);
        System.out.println(res);
    }
}
多发多收
// 客户端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception {
        // 1. 创建客户端对象
        DatagramSocket socket = new DatagramSocket();

        // 2. 创建数据包对象封装要发出去的数据
        /*
        public DatagramPacket(byte buf[], int length, SocketAddress address) {
            参数一 : 封装要发出去的数据
            参数二 : 发送出去的数据大小(字节个数)
            参数三 : 服务端的IP地址(找到服务端主机)
            参数四 : 服务端的端口
        }
        */
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入>>> ");
            String msg = sc.nextLine();
            // 如果用户输入exit命令,就执行退出
            if ("exit".equals(msg)) {
                System.out.println("欢迎再来!");
                socket.close();  // 4. 关闭连接,释放其所占用的网卡资源
                break;
            }

            byte[] bytes = msg.getBytes();
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
                    InetAddress.getLocalHost(), 6666);

            // 3. 开始正式发送这个数据包的数据出来了
            socket.send(packet);
            System.out.println("客户端数据发送完毕!");
        }
    }
}
// 服务端

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("---服务端启动---");
        // 1. 创建一个服务端对象
        DatagramSocket socket = new DatagramSocket(6666);  // 参数:端口号

        // 2. 创建一个数据包对象,用于接收数据
        byte[] buffer = new byte[1024 * 64];  // 64KB
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);  // 参数:

        while (true) {
            // 3. 正式使用数据包来接收客户端发来的数据
            socket.receive(packet);

            // 客户端ip
            System.out.println(packet.getAddress().getHostAddress());
            System.out.println(packet.getPort());

            // 4. 从字节数组中,把接收到的数据直接打印出来
            // 接收多少就倒出多少
            // 获取本次数据包接收了多少数据
            int len = packet.getLength();
            String res = new String(buffer, 0, len);
            System.out.println(res);
            System.out.println("-------------------");
        }
    }
}

TCP

  • 特点:面向连接,可靠通信
快速入门
// 客户端

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws Exception {
        // 1. 创建 Socket 对象,并同时请求与服务器程序的连接
        Socket socket = new Socket("127.0.0.1", 8888);

        // 2. 从 socket 通信管道中得到一个字节输出流,用来发数据给服务端程序
        OutputStream os =  socket.getOutputStream();

        // 3. 把低级的字节输出流包装成数据输出流
        DataOutputStream dos = new DataOutputStream(os);

        // 4. 开始写数据出去了
        dos.writeUTF("我们还是好朋友,对吧?");
        dos.close();  // 关闭数据输出流管道

        socket.close();  // 释放连接资源
    }
}
// 服务端

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

public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("---服务端启动---");

        // 1. 创建 ServerSocket 的对象,同时为服务端注册端口
        ServerSocket serverSocket = new ServerSocket(8888);

        // 2. 使用 serverSocket 对象,调用一个 accept 方法,等待客户端的连接请求
        Socket socket = serverSocket.accept();

        // 3. 从 socket 通信管道中得到一个字节输入流
        InputStream is = socket.getInputStream();

        // 4. 把原始的字节输入流包装成数据输入流
        DataInputStream dis = new DataInputStream(is);

        // 5. 使用数据输入流读取客户端发送过来的消息
        String res = dis.readUTF();
        System.out.println(res);

        // 输出客户端的IP地址
        System.out.println(socket.getRemoteSocketAddress());

        dis.close();
        socket.close();
    }
}
多发多收
// 客户端

package login;

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

public class Client {
    public static void main(String[] args) throws Exception {
        // 1. 创建 Socket 对象,并同时请求与服务器程序的连接
        Socket socket = new Socket("127.0.0.1", 8888);

        // 2. 从 socket 通信管道中得到一个字节输出流,用来发数据给服务端程序
        OutputStream os = socket.getOutputStream();

        // 3. 把低级的字节输出流包装成数据输出流
        DataOutputStream dos = new DataOutputStream(os);

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入>>> ");
            String msg = sc.nextLine();

            if("exit".equals(msg)){
                System.out.println("欢迎再来!");
                dos.close();  // 关闭数据输出流管道
                socket.close();  // 释放连接资源
                break;
            }
            // 4. 开始写数据出去了
            dos.writeUTF(msg);
            dos.flush();
        }

    }
}
// 服务端

package login;

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

public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("---服务端启动---");

        // 1. 创建 ServerSocket 的对象,同时为服务端注册端口
        ServerSocket serverSocket = new ServerSocket(8888);

        // 2. 使用 serverSocket 对象,调用一个 accept 方法,等待客户端的连接请求
        Socket socket = serverSocket.accept();

        // 3. 从 socket 通信管道中得到一个字节输入流
        InputStream is = socket.getInputStream();

        // 4. 把原始的字节输入流包装成数据输入流
        DataInputStream dis = new DataInputStream(is);

        while (true) {

            try {
                // 5. 使用数据输入流读取客户端发送过来的消息
                String res = dis.readUTF();
                System.out.println(res);
            } catch (Exception e) {
                System.out.println(socket.getRemoteSocketAddress()+"断开了连接");;
                socket.close();
                break;
            }
        }

    }
}
多个客户端同时使用服务端
// 客户端

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

public class Client {
    public static void main(String[] args) throws Exception {
        // 1. 创建 Socket 对象,并同时请求与服务器程序的连接
        Socket socket = new Socket("127.0.0.1", 8888);

        // 2. 从 socket 通信管道中得到一个字节输出流,用来发数据给服务端程序
        OutputStream os = socket.getOutputStream();

        // 3. 把低级的字节输出流包装成数据输出流
        DataOutputStream dos = new DataOutputStream(os);

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入>>> ");
            String msg = sc.nextLine();

            if("exit".equals(msg)){
                System.out.println("欢迎再来!");
                dos.close();  // 关闭数据输出流管道
                socket.close();  // 释放连接资源
                break;
            }
            // 4. 开始写数据出去了
            dos.writeUTF(msg);
            dos.flush();
        }
    }
}
// 服务端

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

public class Server {
    public static void main(String[] args) throws Exception {
        System.out.println("---服务端启动---");

        // 创建 ServerSocket 的对象,同时为服务端注册端口
        ServerSocket serverSocket = new ServerSocket(8888);

        while (true) {
            // 使用 serverSocket 对象,调用一个 accept 方法,等待客户端的连接请求
            Socket socket = serverSocket.accept();
            System.out.println(socket.getRemoteSocketAddress() + "连接到了服务端");
            // 使用一个独立的线程,把当前的 socket 对象交给它负责处理
            new ServerReaderThread(socket).start();
        }
    }
}

class ServerReaderThread extends Thread {
    private Socket socket;

    public ServerReaderThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            // 从 socket 通信管道中得到一个字节输入流
            InputStream is = socket.getInputStream();
            // 把原始的字节输入流包装成数据输入流
            DataInputStream dis = new DataInputStream(is);

            while (true) {
                try {
                    // 使用数据输入流读取客户端发送过来的消息
                    String res = dis.readUTF();
                    System.out.println(res);
                } catch (Exception e) {
                    System.out.println(socket.getRemoteSocketAddress() + "断开了连接");
                    dis.close();  // 关闭流管道
                    socket.close();  // 关闭连接管道
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
获取抖音中x-secsdk-csrf-token的方法 阅读详情

相关推荐

SAP资产按每天折旧功能介绍

注意:此处在计算百分比时将30天作为剩余使用寿命,因为SAPS/4HANA中的计算是通过考虑购置第一年的折旧总天数来进行的。这是因为我在计算总使用寿命时只使用了365天,如果剩余使用寿命大于1年,SAPS/4HANA会将闰年规范化为365天。此功能仅对确定使用寿命或剩余寿命百分比的折旧键有用,如果需要,这种折旧到日的解决方案可以应用于需要每天计算折旧的跨行业(任何国家/行业)。注意:这里在计算百分比时考虑了2天,因为364天已经过期,但目前我们到达2024年,使用寿命为366天。它只会在下一年生效。

yanzibing99的博客 1560

Python进阶04-网络编程

创建服务端端套接字对象绑定端口号设置监听等待接受客户端的连接请求接收数据发送数据关闭套接字。

李宥的博客 1377

软件测试工程师笔试题

这里写目录标题全套软件测试面试笔试题(附答案)二、选折三、添空四、简答(资料是搜集整理的,感谢前辈的解题)无1.区别阶段评审的与同行评审2.什么是软件测试3. 简述集成测试的过程4 怎么做好文档测试5 白盒测试有几种方法6 系统测试计划是否需要同行审批,为什么7Alpha 测试与 beta 的区别8 比较负载测试,容量测试和强度测试的区别。性能测试从使用方便的角度来说,9 测试结束的标准是什么?10 描述软件测试活动的生命周期?11 软件的缺陷等级应如何划分? 软件测试工程师笔试题(附答案) 全套软件测试面

m0_46446002的博客 2549

网络编程04

网络编程04 学习目标: 1.了解poll函数 2 .熟练使用epoll多路IO模型 3.了解epoll ET/LT触发模式并实现 4 .理解epoll边缘非阻塞模式并实现 5.了解epoll反应堆模型设计思想 6 .能看懂epoll反应堆模型的实现代码 ...

骊山道童的博客 326

SuperPoint+SuperGlue在HLoc中的实战效果对比:5大公开数据集测试报告

本文在HLoc框架下,对传统SIFT与深度学习组合SuperPoint+SuperGlue在五大公开数据集上的视觉定位效果进行了实战对比测试。报告详细分析了两种方案在Aachen Day-Night、RobotCar Seasons等不同光照、季节及场景下的表现,揭示了SuperPoint+SuperGlue在应对剧烈光照变化和长期外观变化时的显著优势,并提供了基于HLoc模块化设计的选型与配置策略。

weixin_29093169的博客 425

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 564

04 Linux网络编程

Linux网络编程

weixin_52341045的博客 2943

基于STM32L4XX的环境光传感器(AS7343-DLGMN)应用程序设计

define AS7343_STATUS_SPECTRAL_INT (1 << 3) /* 光谱数据就绪 */#define AS7343_SYS_CFG_SPECTRAL_EN (1 << 1) /* 光谱测量使能 */#define AS7343_SYS_CFG_ALS_EN (1 << 0) /* ALS使能 */#define AS7343_SYS_CFG_INT_EN (1 << 4) /* 中断使能 *//* 切换通道组 (0=组1 F1-F6, 1=组2 F7-F12) */

myron6688的博客 257

Day04_网络编程

网络编程=套接字编程=Socket编程Socket(套接字) 负责进程之间的网络数据传输(是二进制类型)

l12345sy的博客 288

深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件

分别使用聊天流和工作流进行数据分析结果的可视化,生成html文件。聊天流可以配置带记忆,这样就可以多次交互优化结果。

qq_20466211的博客 1709

Captcha must be filled out,解决Kaggle新用户注册无法弹出验证提示的问题

Captcha must be filled out

weixin_46713695的博客 5万+

QT——C++ 网络编程04

QT——C++ 网络编程04。

a123123sdf的博客 444

【YOLOv8-pose姿态识别部署至RK3588:模型训练到RKNN落地,让人体姿态分析精度与边缘推理速度双突破】

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 329

04网络编程(自学时笔记)

自学时的一些笔记

LLLYYYF的博客 306

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

网络编程入门04

Poll函数 #include <poll.h>   int poll(struct pollfd fd[], nfds_t nfds, int timeout);   参数:    1)第一个参数:一个结构数组,struct pollfd结构如下:   struct pollfd{   int fd; //文件描述符   short ...

190

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

04_2_Python网络编程

网络编程的核心是Socket(套接字),用于实现不同主机间的通信。Socket分为流式(TCP)和数据报式(UDP)。TCP提供可靠连接,UDP则更轻量但不保证可靠性。

qq_64232275的博客 1311

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

狂神说笔记——网络编程04

网络编程 1.概述 邮件: 计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程的目的:无线电台…传播交流信息,数据交换,通信。 想要达到这个效果需要什么: 如何让准确的定位网络上的一台主机 192.168.16.124:端口, 定位上这个计算机上的某个资源。 找到了这个主机,如何传输数据呢? Javaweb:网页编程 、 B/S架构 网络编程

杨丙寅 545

网络编程—04

/* 客户端 通过查阅socket对象,发现在该对象建立时,就可以去连接 指定主机。 因为tcp是面向连接的,所以在建立socket服务时,就要有服务 端存在,并连接成功,形成通路后,在该通道进行数据的传输。 需求:给服务端发送一个文本数据 步骤: 1,创建socket服务,并指定要连接的主机和端口。 */ 例: import java.io.*; import java.

pb_love_java的专栏 584

嵌入式——04 网络编程

网络编程。

weixin_41650829的博客 237

Netty04——NIO 网络编程

一、非阻塞网络编程  NIO 非阻塞网络编程中Selector、SelectionKey、 ServerScoketChannel和SocketChannel的关系

如不來的博客 242

Python中级 —— 04网络编程

网络编程 网络编程对所有开发语言都是一样的,Python也不例外。用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。 TCP编程 TCP建立可靠连接,并且通信双方都可以以流的形式发送数据 Socket是网络编程的一个抽象概念。 通常我们用一个Socket表示打开了一个网络链接"。 打开一个Socket需要目标计算机的IP地址和端口号,再指定协议...

weixin_34332905的博客 165

python高级04——网络编程

端口是传输数据的通道,区分端口用端口号。TCP特点如下:客户端:主动发起连接请求。客户端开发流程:客户端开发: 3-2、TCP服务端开发 开发流程:开发: 端口复用 3-3、socket中send和recv原理 TCP socket的发送和接收缓冲区 缓冲区:现存储数据,达到一定数量直接发出。下面的程序可以服务多个客户端,但不能同时服务。 TCP多任务服务器 使用多任务可以实现一个服务器同时服务多个客户,本例用线程。

weixin_50942741的博客 379

NIO笔记04-网络编程

本章节主要介绍阻塞和非阻塞、Selector选择器、处理accept、read、write事件等

weixin_46425661的博客 1468

网络编程 day04

6. WebServer:6.1. 网页原码分析、6.2. 结合 Modbus 部分整体流程分析、练习

lymdcsdn的博客 488

网络编程0x04 Listen函数

listen函数分析

Erice_s的博客 478

高级API入门之Java网络编程以及字符流【04】

一、Java网络编程 网络编程不等于网站编程,网络编程即使用套接字来达到进程间通信,现在一般称为TCP/IP编程。 (1)软件体系结构分类 ① C/S结构 全称Client/Server结构,是指客户端和服务器结构。常见程序有QQ,迅雷等软件。 ② B/S结构 全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 注:两种结构各有优势,但是无论哪种架构,都离不开网络的支持

m0_67768699的博客 603
上一篇: 03_并发并行与生命周期
下一篇: 05_通信案例
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值