网络编程套接字(socket)

从飞机翼型仿真到燃烧模拟:Fluent多物理场耦合的3种实战策略 本文深入探讨了Fluent在多物理场耦合仿真中的三种实战策略,涵盖可压缩流动与燃烧耦合、湍流模型选择及网格策略,以及顺序耦合、强耦合和混合耦合方法。通过具体案例和工程实践,帮助中高级用户提升仿真精度和效率,适用于航空航天和能源化工等领域。 阅读详情

套接字

什么是socket:

所谓的套接字也就是socket,这个socket和我们编写网络程序又有什么关系呢:

socket是传输层给应用层提供的API的集合,socket就相当于是程序使用网络的接口,而网卡是把数据发出去的硬件,socket就相当于是网卡的一个遥控器

我们网络编程主要涉及的就是传输层以及应用层的交互,我们先决定传输层的哪一个协议,是UDP还是TCP,也就是上文所介绍的两种:

后续的各种层是操作系统根据我们代码中的任务来选择的

发送数据的过程:

Java 程序
   ↓
Java Socket 对象
   ↓
文件描述符 fd
   ↓
进程的文件描述符表
   ↓
操作系统内核中的 Socket 对象
   ↓
TCP / IP 协议栈
   ↓
网卡
   ↓
网络

为什么会有文件描述符表:明明我们是讲socket,为什么会有一个文件描述符表呢,原因就是在Linux中很多东西都被抽象成了“可以像文件一样读写的资源”,所以他们统一通过文件描述符表(fd)来管理,但是我们学习的并不是linux操作系统啊,为什么会有什么个说法,因为在基本上所有的操作系统中,都有这么一个概念,都会让程序拿到一个编号,然后通过这个编号来找到底层系统中的操作以及方法,只不过在linux里面叫做文件描述符表,所以我们可以统一叫做这个来理解,还有就是为什么我们不能直接通过Java代码来操作一切,因为网络、文件、进程这些资源都属于操作系统的重要资源,不能让普通程序随便直接改,所以需要通过一个像文件描述符表的东西进行调度,调度到底层的操作系统的socket

socket的组成:

Socket(网络通信接口,大概念)
        │
        ├── TCP
        │    ├── Socket
        │    └── ServerSocket
        │
        └── UDP
             ├── DatagramSocket
             └── DatagramPacket

UDP

DatagramSocket = 通信工具
DatagramPacket = 要传输的数据包

DatagramSocket

构造方法作用常见场景
DatagramSocket()创建一个 UDP Socket,端口由系统自动分配客户端常用
DatagramSocket(int port)创建 UDP Socket,并绑定指定端口服务器常用
DatagramSocket(int port, InetAddress laddr)绑定指定端口和本机 IP一台机器有多个网卡/IP 时使用
方法作用
send(DatagramPacket p)发送 UDP 数据包
receive(DatagramPacket p)接收 UDP 数据,并保存到 p 中
close()关闭 Socket,释放网络资源
getLocalPort()获取当前 Socket 绑定的本地端口
getLocalAddress()获取当前 Socket 绑定的本地 IP
isClosed()判断 Socket 是否已经关闭

DatagramPacket

1,接收数据:

new DatagramPacket(byte[] buf, int length)

参数作用
buf用来存放收到的数据
length最多允许接收多少字节

2,发送数据:

new DatagramPacket(
    byte[] buf,
    int length,
    InetAddress address,
    int port
)

参数作用
buf要发送的数据
length要发送多少字节
address对方的 IP 地址
port对方的端口号


回显服务器例子

注意一

为什么服务器要指定端口,而客户端不需要,因为一台服务器是用来服务很多的客户端的,指定端口是让客户端知道并且只传入到那一个端口里面去,但是客户端有很多,就得系统随机,并且有些同学很容易将一个概念混淆,就是觉得客户端的端口和服务器的端口得一致才能对接上,实际是不是的:这里也会涉及前文讲到的五原组

我们只要明确了这五个就行,不需要一致

不是说需要五元组吗,那为什么服务器里面好像少了一个自己的ip:因为系统会根据客户端的数据进行匹配

比如客户端发送:
目标 IP = 192.168.1.10
目标端口 = 9090
协议 = UDP

到我们电脑之后,系统看到的信息就是

目的 IP:192.168.1.10
目的端口:9090
协议:UDP

假设你服务器中写到:

new DatagramSocket(9090);

也就相当于是:

监听:所有本机 IP 的 UDP 9090

然后进行匹配,最终就可以得出服务器自己的ip

所以说五元组往往是客户端和服务器两边的信息共同组成的!!!!!!!!

注意二

局域网 ≈ 一个小区
IP    ≈ 楼号 / 房屋地址
端口  ≈ 房间号

所以为什么会出现端口号冲突,也就是我们现在写的程序是在自己的电脑上面,所以ip都是127.0.0.1,所以如果服务器和客户端的端口号也一致的情况下,就会产生端口号冲突,也就是走到了一个小区的一个楼层中的一个房间,那我们电脑上有那么多的应用程序,为什么不会造成冲突呢,因为系统会给客户端的端口自动分配,所以我们程序里面的客户端的代码也没有指定端口号,简单介绍一下电脑里的ip

不同 IP 的来源不一样:

127.0.0.1:操作系统按照网络协议标准预留的,本机固定使用。

192.168.x.x 这种局域网 IP:一般是你家路由器通过 DHCP 自动分配给电脑。

公网 IP:通常由运营商分配给你的路由器/网络出口。

VPN 的 IP:由 VPN 软件或 VPN 服务器分配。

所以我们的应用程序的ip都是通过操作系统自己分配的,比如你点开来一个网站,系统会识别这个请求是从WiFi网卡发出去的,所以会分配192开头的那个

具体代码

package network;
//服务器

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.nio.charset.StandardCharsets;

public class UdpEchoServer {
    //首先创建一个socket对象
    DatagramSocket serverSocket=null;
    //通过构造方法来完整
    //创建一个服务器对象,需要指定端口
    public UdpEchoServer(int port) throws Exception{
        serverSocket=new DatagramSocket(port);
    }
    //开始方法
    public void start() throws IOException {
        System.out.println("服务器启动了");
        while (true) {
            //先得创建一个datagrampacket对象,这个对象是传输数据的基本单位,就相当于你赶海一人拿一个桶是一样的
            DatagramPacket requestPacket = new DatagramPacket(new byte[1024], 1024);
            //接收请求
            serverSocket.receive(requestPacket);
            //将请求转为字符串
            String request = new String(requestPacket.getData(), 0, requestPacket.getLength());
            //根据请求计算响应
            String response = process(request);
            //将响应封装到datagrampacket对象中,并且返回
            DatagramPacket responsePacket = new DatagramPacket(response.getBytes(), response.getBytes().length,
                    requestPacket.getSocketAddress());
            //requestPacket.getSocketAddress()不仅拿到了ip也拿到了端口号
            serverSocket.send(responsePacket);
            //打印日志
            System.out.printf("客户端:%s 请求:%s 响应:%s\n", requestPacket.getSocketAddress(), request, response);
        }
    }

    private String process(String request) {
        //因为回显,所以就原路返回就行
        return request;
    }

    public static void main(String[] args) throws Exception {
        UdpEchoServer udpEchoServer=new UdpEchoServer(9090);
        udpEchoServer.start();
    }
}
package network;

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

//客户端
public class UdpEchoClient {
    //也是先创建一个socket对象
    DatagramSocket clientSocket=null;
    //需要给定服务器的ip以及端口
    private String serverIp;
    private int serverPort;
    public UdpEchoClient(String serverIp,int serverPort) throws SocketException {
        clientSocket=new DatagramSocket();
        this.serverIp=serverIp;
        this.serverPort=serverPort;
    }
    public void start() throws Exception{
        while(true){
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入要发送的内容:");
            String request=scanner.nextLine();
            if (request.equals("exit")){
                break;
            }
            DatagramPacket requestPacket=new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(serverIp),serverPort);
            clientSocket.send(requestPacket);
            DatagramPacket responsePacket=new DatagramPacket(new byte[1024],1024);
            clientSocket.receive(responsePacket);
            //将服务器返回的数据打印出来
            String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
            // 4. 显示响应.
            System.out.println(response);
        }
    }

    public static void main(String[] args) throws Exception {
        UdpEchoClient udpEchoClient=new UdpEchoClient("127.0.0.1",9090);
        udpEchoClient.start();
    }
}

注意三

别人要访问我的服务器:

本机测试用 127.0.0.1,想让互联网中的别人访问,通常需要“公网 IP + 开放端口”,云服务器就是最常见的实现方式。

127.0.0.1表示当前这台电脑自己。

查字典案例

我们刚刚通过一个回显的案例来初步了解了一下UDP的构造以及相关socket的api,那我们现在再用一个查字典的案例来进一步了解一下

注意一

服务器以及客户端的主要流程

服务器大体

在while循环里面

第一步:读取请求并解析

(因为我们这里是需要返回一个字符串,所以转为字符串格式)

第二步:根据请求计算相应

(这里以回显为例子,所以只需要原路返回就行)

第三步:把相应返回给客户端

客户端大体

第一步:在控制台读取输入

第二步:构造请求发送给服务器

第三步:接收服务器发来的响应

第四步:根据返回来的响应进行显示结果

所以我们可以总结一下:我们写服务器以及客户端,只需要跟着上面的步骤,在发送和接收的时候,来书写对的DatagramPacket对象,使用正确的构造方法

注意二

为什么可以这么写:因为其实现在市面的大部分背单词软件都是这么写的,我们也可以上网复制中英文对应关系来使我们的回答更加全面

具体代码

package network;

import java.io.IOException;
import java.net.DatagramSocket;
import java.util.HashMap;
import java.util.Map;

public class UdpDictServer extends UdpEchoServer{
    //因为我们是一个查字典,所以我们用到map来根据key来查找values
    Map<String,String> map=new HashMap<String, String>();
    //重写方法
    public UdpDictServer(int port) throws Exception {
        super(port);
        //在这里传入对应的中英文关系
        map.put("apple","苹果");
        map.put("banana","香蕉");
        map.put("cat","猫");
        map.put("dog","狗");
    }
    @Override
    public String process(String request) {
        //request 是客户端传来的查询内容,是 key;getOrDefault() 返回的是这个 key 对应的 value。
        return map.getOrDefault(request,"查无此词");
    }
    public static void main(String[] args) throws Exception {
        UdpDictServer server = new UdpDictServer(9090);
        server.start();
    }
}

(因为这里的客户端和前面的回显服务器一样,都是发送,包装成String,然后发送回去,所以我们还是用的之前的客户端)

TCP

ServerSocket和Socket

客户端                                      服务器

Socket
  │
  │ 请求连接
  ├──────────────────────────→ ServerSocket
  │                                │
  │                             accept()
  │                                │
  │                                ↓
  │                             Socket
  │                                │
  └──────────── TCP连接 ────────────┘

整体的关系差不多就是这样,serversocket负责将将请求引进家门(处理客户端的连接,所以只会在服务器中写到),而socket像是专门负责业务的专员(在客户端以及服务器里都会用到)

回显服务器例子

TCP的短长连接

短连接:就是连接一次,通信完就断,需要多次进行连接和断开,会影响效率,但是不会一直占着服务器资源

长连接:连接一次,可以通信很多次之后关闭,就像我们程序中写到的while循环,不用老是创建和关闭,所以效率会高,但是会长时间占着资源,可能一直占着一个线程

注意一

accept建立连接:

因为在我们没有写多线程的时候,就只有一个socket服务员,也就是只能一个线程在进行服务,后面的就得等着,所以我们通过多线程的形式,可以实现多客户端

注意二

flush:

在我们用printwriter(这个内置了缓冲区)进行写入的时候,会先将数据写进缓冲区里,数据满了之后才会将数据传输出去,所以我们得写flush,写入一些数据就将他们传输过去

TCP和UDP的有无连接

TCP的Socket socket = serverSocket.accept()这个方法,会进行连接,也就是会拿到这个socket的信息并且记录下来,所以后续就会根据这个信息给特定的socket进行交互,但是udp不会记录对方socket信息

注意三

具体代码

package network;

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


public class TcpEchoClient {
    Socket socket=null;
    TcpEchoClient(String serverName,int serverPort) throws IOException {
        socket=new Socket(serverName,serverPort);
    }
    public void start() throws IOException {
        System.out.println("client start!");
        //依旧是先创建字节流的输入输出来处理数据
        try (InputStream inputStream = socket.getInputStream();
             OutputStream outputStream = socket.getOutputStream()) {
            Scanner scanner = new Scanner(System.in);
            Scanner scannerNetwork = new Scanner(inputStream);
            PrintWriter printWriter = new PrintWriter(outputStream);
            while (true) {
                //先读取数据
                System.out.println("client:请输入数据");
                String request = scanner.next();
                //再将读取的数据传给服务器
                printWriter.println(request);
                printWriter.flush();
                //最后读取服务器的相应
                if (!scannerNetwork.hasNext()) {
                    break;
                }
                String response = scannerNetwork.next();
                //最后打印出来
                System.out.println("server: " + response);
            }

        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws IOException {
        TcpEchoClient client = new TcpEchoClient("127.0.0.1", 9090);
        client.start();
    }
}
package network;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TcpEchoServer {
    //先创建一个ServerSocket对象
    ServerSocket serverSocket = null;

    public TcpEchoServer(int port) throws Exception {
        serverSocket = new ServerSocket(port);

    }

    //开始方法
    public void start() throws IOException {
        //先建立连接,然后由Socket进行处理
        //注意一
        ExecutorService executorService = Executors.newCachedThreadPool();
        while (true) {
            Socket socket = serverSocket.accept();
            executorService.submit(() -> {
                try {
                    processConnection(socket);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            });
        }
    }

    private void processConnection(Socket socket) throws IOException {
        System.out.printf("[%s:%d] 客户端上线!\n", socket.getInetAddress(), socket.getPort());
        //tcp是面向字节流的
        try (InputStream inputStream = socket.getInputStream();
             OutputStream outputStream = socket.getOutputStream()) {
            //因为tcp是面向字节流的,所以我们定义了InputStream和OutputStream,但是我们输入是一个字符串,所以我们会
            //继续用到scanner来读和PrintWriter来写,并且PrintWriter可以将我们输入的字符串转为字节传输出去
            Scanner scanner = new Scanner(inputStream);
            PrintWriter printWriter = new PrintWriter(outputStream);
            while (true) {
                if (!scanner.hasNext()) {
                    // 客户端关闭了连接
                    System.out.printf("[%s:%d] 客户端下线!\n", socket.getInetAddress(), socket.getPort());
                    // 假设这里有一系列的逻辑呢??
                    break;
                }
                //先接收数据
                String request = scanner.next();
                //再根据请求计算相应
                String response = process(request);
                //最后发送相应给客户端
                printWriter.println(response);
                //注意二
                printWriter.flush();
                System.out.printf("[%s:%d] 客户端请求: %s\n", socket.getInetAddress(), socket.getPort(), request);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            socket.close();
        }
    }

    public String process(String request) {
        return request;
    }

    public static void main(String[] args) throws Exception {
        TcpEchoServer tcpEchoServer = new TcpEchoServer(9090);
        tcpEchoServer.start();
    }
}

查字典案例

package network;

import java.util.HashMap;
import java.util.Map;

public class TcpDictServer extends TcpEchoServer{
    Map<String,String> map=new HashMap<String, String>();

    public TcpDictServer(int port) throws Exception {
        super(port);
        map.put("apple","苹果");
        map.put("banana","香蕉");
        map.put("cat","猫");
        map.put("dog","狗");
    }
    @Override
    public String process(String request) {
        //request 是客户端传来的查询内容,是 key;getOrDefault() 返回的是这个 key 对应的 value。
        return map.getOrDefault(request,"查无此词");
    }
    public static void main(String[] args) throws Exception {
        TcpDictServer server = new TcpDictServer(9090);
        server.start();
    }
}

Sigrity XtractIM实战:5步搞定IC封装宽带模型提取(附BGA案例) 本文通过一个典型BGA封装案例,详细介绍了使用Cadence Sigrity XtractIM工具进行IC封装宽带模型提取的五步实战流程。内容涵盖从环境准备、参数设置、结果验证到模型导出的完整操作,重点阐述了如何利用XtractIM生成高精度、紧凑的宽带SPICE模型,以解决高速电路设计中因封装模型不准导致的信号与电源完整性问题,助力工程师提升仿真精度与设计效率。 阅读详情

相关推荐

专访高性能计算专家赵开勇:无人机/机器人开发实战,如何优化深度学习?

从能够自主飞行的无人机,到能和小朋友玩物体识别等游戏的机器人,极客们对智能设备追求没有止境。除了轻巧的体积、超长的续航,更重要的是要有一个智能的“大脑”,来实现人类能够想得到的人机交互,或者智能化的自主决策和行为动作,毫无疑问强大的深度学习能力不可或缺。那么,拒绝束缚人类想象力的嵌入式智能设备,其开发工作需要什么样的环境和工具?开发者进行相关开发的可行思路是什么?近日,优快云记者就此专访了智能设...

happytofly的博客 3510

JAVA网络编程——socket套接字的介绍上(详细)

大家好!今天笔者分享一篇关于Socket 套接字的博客,希望能为正在学习网络编程的读者提供一些帮助。梳理网络通信的基础概念本文还将顺带总结一些与 Socket 密切相关的基础知识,包括:IP 地址、端口号、网络协议、五元组、协议分层模型的作用与内容、TCP/UDP 区别、Socket API 的使用方式,以及如何通过代码模拟客户端/服务器之间的通信过程。理解客户端与服务器的数据交互。

cjejwe的博客 6318

保姆级教程:用杰理701N可视化SDK搞定ANC降噪配置(从工具到代码全流程)

本文提供了一份详细的杰理701N可视化SDK配置ANC降噪功能的教程,涵盖从开发环境搭建到代码集成的全流程。通过图形化工具和代码示例,帮助开发者快速掌握ANC参数配置技巧,优化降噪效果,解决常见问题。

weixin_30616969的博客 452

【网络编程】网络编程 和 Socket 套接字认识

为什么需要网络编程,什么是网络编程,Socket 套接字的简要认识

bit me的博客 3089

CS1237卡尔曼滤波实战:如何用24位ADC实现电子秤级精度?

本文详细介绍了如何利用CS1237 24位ADC芯片结合卡尔曼滤波算法实现电子秤级精度测量。通过解析CS1237硬件特性、卡尔曼滤波原理及STM32驱动优化,提供了一套完整的解决方案,包括多通道支持、驱动代码实现和性能调优技巧,适用于工业测量和嵌入式开发领域。

linux的博客 1088

无人机芯片模块技术要点分析

恶劣环境下信号稳定性:无人机在恶劣环境下工作时,遥感系统采集的信号往往很不稳定,视频信号处理芯片需要具备强抗干扰能力,能辨别脉冲脉宽为50ns以上、幅度为0V~4.5V的输入信号。这种架构能兼顾强大的运算能力和灵活的接口控制。芯片小型化:麻省理工学院的研究人员已设计出仅20平方毫米的微型芯片,可处理无人机飞行所需的惯性数据和相机图像,为微型无人机的发展奠定了基础。光子集成芯片(PIC) :研究显示,与电子芯片相比,光子计算芯片在延迟、计算容量和能效上都有数量级的提升,有望解决当前无人机系统的计算瓶颈。

YUNZHUO666的博客 1404

[Linux网络编程]Socket套接字

socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。本文归纳整理Socket的使用

weixin_44972997的博客 3674

深入Netflix影片分类数据抓取的Python爬虫实战:反反爬机制绕过与Playwright应用全解析

技术工具用途Playwright控制真实浏览器模拟用户行为开发语言asyncio异步调度浏览器任务pandas数据处理和导出sqlite3本地数据库存储支持随机UA模拟,增强反爬能力为什么选择 Playwright?✅ 支持多浏览器(Chromium、Firefox、WebKit)✅ 原生支持 Python 异步编程✅ 提供截图、滚动模拟、验证码处理等高级功能✅ 反爬能力强,模拟真实用户访问。

2201_76125261的博客 1240

网络编程—Socket套接字详解

网络编程,Socket套接字

Krive~Irving 3226

2026年03月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《。订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 342

QGIS之二十六pbf转osm转shp

QGIS之二十六pbf转osm转shp

yilvyangguang520的博客 7501

【JavaEE初阶】 网络编程基础与Socket套接字

网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程特殊的情况,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:进程A:编程来获取网络资源进程B:编程来提供网络资源。

m0_71731682的博客 1791

【Python机器学习】零基础掌握TweedieRegressor广义线性回归模型

本次文章主要介绍了如何使用Tweedie回归模型预测电动汽车的实际续航里程。基于车速、气温和驾驶习惯等多种因素,模型能够准确地预测出电动汽车的续航里程,从而为生产商和消费者提供有用的信息。优点总结,Tweedie回归模型在处理具有多元性和高度散布的数据方面表现出色,特别适用于需要考虑多种影响因素的预测任务。优点名称对应描述说明多元性强可以同时处理多种类型和维度的数据高度可定制允许用户自定义损失函数和正则项对异常值鲁棒能够较好地处理数据中的异常值易于解释参数和预测结果都相对容易解释。

Mr数据杨 1007

【计算机网络原理】网络编程和Socket套接字

是指网络上的主机,通过不同的进程以编程的⽅式实现⽹络通信.当然,我们也可以是在一台主机,只要是在不同的进程中,就可以通过网络通信来传输资源,不一定需要在多台主机上实现.同时并不代表只能是从进程B到进程A,而是从发送方,到接收方进程A可以是发送方,也可以是接收方,进程B同理.2.网络编程中的基本概念1.发送端 vs 接收端在⼀次⽹络数据传输时:数据的发送⽅进程,称为发送端。发送端主机即⽹络通信中的源主机。数据的接收⽅进程,称为接收端。接收端主机即⽹络通信中的⽬的主机。

xiaoxie8023的博客 2342

怀旧版电脑GBC模拟器

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

网络编程-Socket套接字

指网络上的的主机,通过不同的进程,以编程的方式实现网络通信(或成为网络数据传输)。当然,根据定义只要满足进程不同就行,即便是同一个主机,只要是不同的进程,基于网络来传输数据,也属于网络编程。对于开发来说条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。进程A:编程来获取网络资源;进程B:编程来提供网络资源;Socket套接字:是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。

zcx777123的博客 1573

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

网络编程套接字(Socket)

/构造数据报发送的数据报,数据为字节数组中,offset到length的数据,address为目的主机的ip和port。DatagramPacket是对UDP数据报的抽象表示,一个DatagramPacket对象就是一个UDP数据报 ,数据传输的基本单位。面向字节流:传输数据基于IO流,在IO流没有关闭的情况下,每次传输数据和接收数据没有数量限制,数据可以多次发送,也可以分开多次接收。DatagramSocket () //创建UDP数据报套接字的Socket,一般用于客户端(操作系统分配空闲端口);

aklnhg的博客 1165

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【JavaEE】网络编程与socket套接字

文章目录一、网络编程1.什么是网络编程2.网络编程的相关概念二、socket套接字1.概念2.socket套接字分类3.UDP数据报套接字编程4.TCP流套接字编程三、预告 一、网络编程 1.什么是网络编程 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。   我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程。   特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。  

weixin_46913665的博客 793

网络编程套接字socket

一.网络编程文章分以下几个部分:网络编程socket套接字UDP数据报套接字编程TCP流套接字编程一.网络编程。

kele_xin的博客 657

linux网络编程socket套接字

因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。同样地,接收主机如果是小端字节序的,接到16位的源端口号也要做字节序的转换。

qq_44729609的博客 1276

【JavaEE】网络编程基础之Socket套接字

网络编程基础之Socket套接字!

冲击大厂之路!!! 1162

【Java网络编程】Socket套接字

哈喽,大家好~我是你们的老朋友:保护小周ღ,本期为大家带来的是网络编程的前提概念 Socket 套接字,操作系统提供Socket 用于封装底层的协议细节和通信逻辑,使应用程序可以通过简单直观的API与网络进行交互。所以客观的角度讲基于Socket 套接字开发,就是网络编程。概念篇~~ 更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

保护小周ღ的博客 1709

JAVA-网络编程套接字Socket

在 Java 中,套接字(Socket)是一种用于实现网络通信的机制,它提供了一种在不同计算机之间进行数据传输的方式。

weixin_65528013的博客 1850

网络编程 -- 网络编程基础概念 和 Socket 套接字

简单接受了网络编程的概念和网络编程需要使用的套接字--Socket

想听风雨的博客 1129

网络编程之Socket套接字

本文是Java网络编程的学习,学习如何进行网络编程,Socket套接字在UDP和TCP协议中的不同用法。之后的学习内容将持续更新!!!

qq15035899256的博客 1550

网络编程『socket套接字 ‖ 简易UDP网络程序』

在当今数字化时代,网络通信作为连接世界的桥梁,成为计算机科学领域中至关重要的一部分。理解网络编程是每一位程序员必备的技能之一,而掌握套接字编程则是深入了解网络通信的关键。本博客将深入讨论套接字编程中的基本概念、常见API以及实际应用,通过一步步的学习,帮助读者逐渐掌握网络编程的精髓。

北 海的博客 8929

【linux网络编程】套接字socket

的端点,是应用程序访问网络的接口,用于在不同计算机或同一计算机的进程之间通信。:在应用程序和网络协议之间建立连接,允许数据收发。,它允许不同计算机或同一计算机上的进程通过。

m0_49106549的博客 1054
上一篇: 网络的初识
下一篇: 网络原理TCP/IP
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值