网络编程——TCP网络编程&UDP编程

基于TCP和UDP的socket通信程序(C语言) C语言编写的两个聊天程序,一个是基于TCP一个是基于UDP,算是给初学socket编程的朋友一个启迪吧,里面代码注释比较详细,代码尽量去掉不相干的东西,突出TCP和UDP通信的过程。 立即下载

1.计算机网络:将分布在不同区域不同地方的多台计算机和网络设备通过线程连接起来组成一套大型系统,来实现计算机之间的信息传递和资源共享的设备.

2.网络编程:编写一个程序来实现网络间信息传递.

网络编程要使用的技术:网络编程+多线程+流

3.网络编程三要素:

3.1:IP:ip地址是每台计算机在网络中唯一标识.在同一个网络中不能有相同ip地址.

在不同网络中,可以有相同ip地址.

本机回环地址:127.0.0.1

查看本机IP:运行->cmd->ipconfig

查看本机是否能与其他计算机连通:运行->cmd->ping ip地址

3.2:端口:应用程序在网络中唯一标识.端口范围:0~65535,其中0-1024之间商品被系统软件占用.

3.3:协议:实现网络间通信的规则.

4.OSI七层模型和TCP/IP四层模型

5.InetAddress:此类表示Internet协议(IP)地址。

public static void main(String[] args) throws UnknownHostException {
    //获得本机ip地址对象
   // InetAddress ip1=InetAddress.getLocalHost();
    InetAddress ip1=InetAddress.getByName("192.168.2.113");
    System.out.println("本机ip:"+ip1.getHostAddress());
    System.out.println("主机名:"+ip1.getHostName());

    InetAddress[] ips=InetAddress.getAllByName("www.baidu.com");
    for (InetAddress ip2:ips) {
        System.out.println("百度ip:" + ip2.getHostAddress());
    }
}

6.TCP网络编程:用的TCP协议.

TCP协议:是一种安全的,面向链接的网络层协议.优点:安全性高(因TCP的客户端与服务器端要经过三次握手才能建立连接,连接后才能互发消息).缺点:效率低.

Socket:客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的信使.

ServerSocket:服务器套接字.监听客户端的套接字对象.

6.1:客户端发送消息,服务端接收消息

eg:public static void main(String[] args) throws IOException {
    //创建套接字对象,第一个参数是服务端IP,第二个参数服务端应用的端口号
    Socket socket1=new Socket("127.0.0.1",6666);

    //用套接字对象创建网络输出字节流对象
    OutputStream os=socket1.getOutputStream();

    //声明一个变量存发送给服务器的消息
    String word1="Hello Server!!";
    //用网络输出流对象将消息通过网络发给服务器
    os.write(word1.getBytes());
    System.out.println("客户端发消息给服务器为:"+word1);

    //关对象
    os.close();
    socket1.close();
}

public static void main(String[] args) throws IOException {
    //创建服务器套接字对象
    ServerSocket ss=new ServerSocket(6666);
    System.out.println("客户端与服务器正在连接中...");
    //用服务器套接字对象调用方法监听客户端Socket对象,并声明变量接收客户端Socket
    Socket socket2=ss.accept();//接收到客户端的Socket对象,就表示客户端与服务器端三次握手成功,建立连接
    System.out.println("客户端与服务器连接成功!");

    //用套接字对象获得网络字节读取流
    InputStream is=socket2.getInputStream();
    //准备一个数组
    byte[] b=new byte[1024];
    //用网络字节读取流对象调用方法接收客户端的消息,返回的是消息的长度,消息的内容存在数组中
    int len=is.read(b);
    //将接收客户端的消息,转换为字符串类型
    String recieveWord1=new String(b,0,len);
    System.out.println("服务器接收客户端的消息为:"+recieveWord1);

    //关闭对象
    is.close();
    ss.close();
}

6.2:客户端发送消息,服务端回复消息,完成一次聊天

eg:public static void main(String[] args) throws IOException {
    //创建套接字对象,第一个参数是服务端IP,第二个参数服务端应用的端口号
    Socket socket1=new Socket("127.0.0.1",6666);

    //用套接字对象创建网络输出和输入字节流对象
    OutputStream os=socket1.getOutputStream();
    InputStream is=socket1.getInputStream();

    /*客户端发消息给服务器端*/
    //声明一个变量存发送给服务器的消息
    String word1="Hello Server!!";
    //用网络输出流对象将消息通过网络发给服务器
    os.write(word1.getBytes());
    System.out.println("客户端发消息给服务器为:"+word1);

    /*客户端接收服务器回复的消息*/
    //声明一个数组
    byte[] b=new byte[1024];
    //接收服务器的消息
    int len=is.read(b);
    //将接收回复的消息转换为字符串
    String s2=new String(b,0,len);
    System.out.println("客户端接收服务器回复消息为:"+s2);

    //关对象
    os.close();
    socket1.close();
}

public static void main(String[] args) throws IOException {
    //创建服务器套接字对象
    ServerSocket ss=new ServerSocket(6666);
    System.out.println("客户端与服务器正在连接中...");
    //用服务器套接字对象调用方法监听客户端Socket对象,并声明变量接收客户端Socket
    Socket socket2=ss.accept();//接收到客户端的Socket对象,就表示客户端与服务器端三次握手成功,建立连接
    System.out.println("客户端与服务器连接成功!");

    //用套接字对象获得网络字节读取和写入流
    InputStream is=socket2.getInputStream();
    OutputStream os=socket2.getOutputStream();

    /*读取客户端的消息*/
    //准备一个数组
    byte[] b=new byte[1024];
    //用网络字节读取流对象调用方法接收客户端的消息,返回的是消息的长度,消息的内容存在数组中
    int len=is.read(b);
    //将接收客户端的消息,转换为字符串类型
    String recieveWord1=new String(b,0,len);
    System.out.println("服务器接收客户端的消息为:"+recieveWord1);

    /*服务器端回复消息给客户端*/
    //声明一个变量存发送给服务器的消息
    String word1="Hello Client!!";
    //用网络输出流对象将消息通过网络发给服务器
    os.write(word1.getBytes());
    System.out.println("服务器端回复消息给客户端为:"+word1);

    //关闭对象
    is.close();
    ss.close();
}

6.3:客户端与服务器端一对一循环聊天

eg:public static void main(String[] args) throws IOException {
    //创建socket对象
    Socket socket1=new Socket("127.0.0.1",7777);

    //创建网络字符输出和输入流
    BufferedWriter w=new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream()));
    BufferedReader r=new BufferedReader(new InputStreamReader(socket1.getInputStream()));
    Scanner input=new Scanner(System.in);

    //循环聊天
    while (true){
        /*发消息*/
        //从键盘上接收要发送的消息
        System.out.println("客户端发送给服务器的消息为:");
        String sendMess=input.nextLine();
        //将消息发送给服务器
        w.write(sendMess);
        //换行
        w.newLine();
        //刷新缓存
        w.flush();

        /*接收服务器消息*/
        String recieveMess=r.readLine();
        System.out.println("客户端接收服务器的消息为:"+recieveMess);

        //约定一个结束语来结束聊天
        if (sendMess.equals("886")||recieveMess.equals("886")){
            break;
        }
    }

    //关对象
    socket1.close();
}

  public static void main(String[] args) throws IOException {
    //创建服务器的socket
    ServerSocket ss=new ServerSocket(7777);
    System.out.println("客户端与服务器正在连接中...");
    //监视客户端,并接收客户端的socket
    Socket socket1=ss.accept();
    System.out.println("客户端与服务器连接成功!");

    //创建网络字符输入和输出流
    BufferedWriter w=new BufferedWriter(new OutputStreamWriter(socket1.getOutputStream()));
    BufferedReader r=new BufferedReader(new InputStreamReader(socket1.getInputStream()));
    Scanner input=new Scanner(System.in);

    while (true){
        /*接收客户端消息*/
        String recieveMess2=r.readLine();
        System.out.println("服务器接收客户端的消息为:"+recieveMess2);

        /*回复客户端的消息*/
        //从键盘上接收服务回复给客户端的消息
        System.out.println("服务器回复客户端的消息为:");
        String sendMess2=input.nextLine();
        //将消息发送给客户端
        w.write(sendMess2);
        //换行
        w.newLine();
        //刷新
        w.flush();

        //约定一个结束语来结束聊天
        if (sendMess2.equals("886")||recieveMess2.equals("886")){
            break;
        }
    }

    //关对象
    ss.close();
}

6.4:用TCP实现文件上传

eg:public static void main(String[] args) throws IOException {
    //创建客户端socket
    Socket socket2=new Socket("127.0.0.1",8888);

    //上传的文件
    File f1=new File("C:\\Users\\sx\\Desktop\\image\\d.jpg");
    //创建本地读取流
    InputStream is=new FileInputStream(f1);
    //创建网络写入流
    OutputStream os=socket2.getOutputStream();

    /*先先本地硬盘上的文件读取到程序中再写入到服务器,边读取边写入*/
    //1,先将文件名发送到服务器端
    os.write(f1.getName().getBytes());

    //2.将文件内容发送到服务器
    //准备一个数组
    byte[] b=new byte[1024];
    //边读取本地文件边写入服务器
    int len;
    while ((len=is.read(b))!=-1){
        os.write(b,0,len);
    }

    System.out.println("上传成功");
    //3.关对象
    is.close();
    os.close();
    socket2.close();
}

public static void main(String[] args) throws IOException {
    //创建服务器的socket
    ServerSocket ss=new ServerSocket(8888);
    System.out.println("客户端与服务器正常连接中...");
    //监视客户端,并接收客户端的socket
    Socket socket2=ss.accept();
    System.out.println("客户端与服务器连接成功");

    //创建网络读取流
    InputStream is=socket2.getInputStream();

    /*先读取原文件名*/
    //准备一个数组
    byte[] b=new byte[1024];
    //1.第一次读取文件名,将读取的内容存在数组中,返回的是读取的长度
    int len=is.read(b);
    String fileName=new String(b,0,len);

    //创建本地写入流
    OutputStream os=new FileOutputStream("Day34\\aa\\"+fileName);

    //将读取的图片内容写入到服务器硬盘上,边读取边写入
    int len2;
    while ((len2=is.read(b))!=-1){
        os.write(b,0,len2);
    }
    System.out.println("上传成功");

    //关对象
    is.close();
    os.close();
    ss.close();
}

7.UDP编程:用udp协议.

udp协议:是一种不安全,无需建立连接的传输效率高的协议.UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内.udp没有服务器端,都是客户端.

DatagramSocket:此类表示用于发送和接收数据报数据包的套接字。(两个网络传消息的信使) .

DatagramPacket:该类表示数据报包。

7.1:客户端1发送的接收一次客户端2的消息

eg:public static void main(String[] args) throws Exception {
    //创建socket对象,参数是当前这个客户端的端口号
    DatagramSocket socket1=new DatagramSocket(1111);

    /*客户端1发送消息给客户端2*/
    //准备要发送的消息
    byte[] b="恭喜你中了好声音第一等奖".getBytes();
    //将要发送的消息打成数据发送包,第一个参数要发送的数据,第二个数据的长度,第三个是接收方IP对象,第四个是接收方的端口号
    DatagramPacket packet1=new DatagramPacket(b,b.length, InetAddress.getByName("127.0.0.1"),2222);

    //用socket发送数据包
    socket1.send(packet1);
    System.out.println(socket1.getLocalPort()+"发送给"+packet1.getPort()+"的消息为:"+new String(b));

    /*客户端1接收客户端2回复的消息*/
    //准备一个数组
    byte[] b2=new byte[1024];
    //构造一个接收包
    DatagramPacket packet2=new DatagramPacket(b2,b2.length);
    //用socket接收数据包
    socket1.receive(packet2);
    //获得接收的数据
    String recieveMess=new String(packet2.getData(),0,packet2.getLength());
    System.out.println(socket1.getLocalPort()+"接收"+packet2.getPort()+"消息为:"+recieveMess);

    //关对象
    socket1.close();
}

public static void main(String[] args) throws Exception {
    //创建socket对象,参数是当前客户端的端口号
    DatagramSocket socket2=new DatagramSocket(2222);

    /*客户端2接收客户端1的消息*/
    //准备一个数组
    byte[] b=new byte[1024];
    //构造一个数据接收包
    DatagramPacket packet3=new DatagramPacket(b,b.length);
    //用socket接收数据
    socket2.receive(packet3);
    //获得接收的数据
    String recieveMess=new String(packet3.getData(),0,packet3.getLength());
    System.out.println(socket2.getLocalPort()+"接收"+packet3.getPort()+"消息为:"+recieveMess);

    /*客户端2回复客户端1的消息*/
    //准备要回复(发送)的消息
    byte[] sendMess="到哪里去领奖?".getBytes();
    //将消息封装数据发送包
    DatagramPacket packet4=new DatagramPacket(sendMess,sendMess.length, InetAddress.getByName("127.0.0.1"),1111);
    //用socket将消息发送给客户端1
    socket2.send(packet4);
    System.out.println(socket2.getLocalPort()+"回复"+packet4.getPort()+"消息为:"+new String(sendMess));

    //关流
    socket2.close();
}

7.2:客户端1与客户端2循环收发消息

eg:/**
*发送消息的线程
 * @version 1.0
 * @auth sx
 * @date 2020/3/26
 */
public class SendThread extends Thread {
    //声明发送方的socket对象
    DatagramSocket socket1;
    //声明接收方ip对象
    InetAddress ip2;
    //声明接收方端口
    int port2;

    /**
     * 通过构造方法将发送方的socket,接收方ip对象,接收方端口
     *
     * @param socket1,
     * @param ip2
     * @param port2
     */
    public SendThread(DatagramSocket socket1, InetAddress ip2, int port2) {
        this.socket1 = socket1;
        this.ip2 = ip2;
        this.port2 = port2;
    }

    @Override
    public void run() {
        Scanner input = new Scanner(System.in);

        try {
            while (true) {
                //准备要发送的消息
                byte[] b = input.next().getBytes();
                //将要发送的消息打成数据发送包,第一个参数要发送的数据,第二个数据的长度,第三个是接收方IP对象,第四个是接收方的端口号
                DatagramPacket packet1 = new DatagramPacket(b, b.length, ip2, port2);
                //用socket发送数据包
                socket1.send(packet1);
                System.out.println(socket1.getLocalPort() + "发送给" + packet1.getPort() + "的消息为:" + new String(b));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

		  /**
*接收线程
 * @version 1.0
 * @auth sx
 * @date 2020/3/26
 */
public class RecieveThread extends Thread{
    //声明接收方的socket
    DatagramSocket socket2;

    /**
    *用构造方法传入接收方的socket
    *@param socket2
    *@return
    */
    public RecieveThread(DatagramSocket socket2) {
        this.socket2 = socket2;
    }

    @Override
    public void run() {
       try {
           while (true) {
               //准备一个数组
               byte[] b2 = new byte[1024];
               //构造一个接收包
               DatagramPacket packet2 = new DatagramPacket(b2, b2.length);
               //用socket接收数据包
               socket2.receive(packet2);
               //获得接收的数据
               String recieveMess = new String(packet2.getData(), 0, packet2.getLength());
               System.out.println(socket2.getLocalPort() + "接收" + packet2.getPort() + "消息为:" + recieveMess);
           }
       }catch (Exception e){
           e.printStackTrace();
       }
    }
}

public static void main(String[] args) throws Exception {
    //创建socket对象,参数是当前这个客户端的端口号
    DatagramSocket socket1=new DatagramSocket(1111);

    //创建发送消息的线程和接收消息的线程
    SendThread s=new SendThread(socket1, InetAddress.getLocalHost(),2222);
    RecieveThread r=new RecieveThread(socket1);

    //启动线程
    r.start();
    s.start();
}

public static void main(String[] args) throws Exception {
    //创建socket对象,参数是当前客户端的端口号
    DatagramSocket socket2=new DatagramSocket(2222);

    //创建发送消息的线程和接收消息的线程
    SendThread s=new SendThread(socket2, InetAddress.getLocalHost(),1111);
    RecieveThread r=new RecieveThread(socket2);

    //启动线程
    r.start();
    s.start();
}

高分创新点!Mamba+CNN结合,发顶会首选! 研究摘要 近期视觉领域涌现CNN与Mamba的融合架构,通过双分支设计互补优势。ConvMamba结合CNN的局部特征提取与Mamba的全局建模能力,在ImageNet分类任务中实现90.2%准确率,推理速度提升1.8倍。医学图像方向,PGM-UNet引入提示引导残差Mamba模块,结合多尺度空洞卷积与KANs,显著提升分割精度;遥感领域CM-UNet通过CSMamba块与多尺度注意力聚合模块,有效捕捉长距离依赖。这些工作表明,跨模态轻量化融合与注意力优化是未来重要方向。 阅读详情

相关推荐

QGIS效率提升神器:qgis_mcp插件+VSCode联合工作流配置全解析

本文详细解析了如何通过配置qgis_mcp插件与VSCode的联合工作流,实现语音控制和代码自动化来大幅提升QGIS操作效率。该方案将自然语言交互与现代编辑器生态结合,为地理信息专业人士构建了智能、高效的全新工作模式,彻底改变传统GIS操作方式。

weixin_29228203的博客 192

31. 网络编程

今天内容 1.计算机网络:将分布在不同区域不同地方的多台计算机和网络设备通过线程连接起来组成一 套大型系统,来实现计算机之间的信息传递和资源共享的设备. 2.网络编程:编写一个程序来实现网络间信息传递. 网络编程要使用的技术:网络编程+多线程+流 3.网络编程三要素: 3.1:IP:ip地址是每台计算机在网络中唯一标识.在同一个网络中不能有相同ip地址. 在不同网络中,可以有相同ip地址. 本机回环地址:127.0.0.1 查看本机IP:运行->cmd->ipconfig 查看本机是否能与其

qq_44949002的博客 288

三、使用HM进行简单的视频隐写demo

三、使用HM进行简单的视频隐写前言一、实验环境二、实验思路三、实验过程3.1 提取原始载体3.2 使用LSB隐写算法进行隐写3.3 放回含密载体3.4 提取含密载体3.5 使用LSB提取算法进行比对四、碰到的问题以及解决思路4.1 块的结构体发生变化4.1.1 产生的原因4.1.2 解决方法4.2 一个有趣的现象4.2.1 产生的原因4.3 视频产生较大失真4.3.1 产生的原因4.3.2 解决方法五、总结 前言 在前两篇博客中介绍了基于HEVC/H.265视频编解码器的视频隐写的基本思路,本文将详细记录

杨酬勤的博客 1795

网络编程TCP的应用

文章目录1、TCP介绍2、TCP特点2.1、面向连接2.2、可靠传输3、TCP和UDP的不同点4、UDP通信模型5、TCP通信模型6、TCP的客户端7、TCP服务器总结 1、TCP介绍 TCP协议,传输控制协议(英语:Transmission Contron Protocol,缩写为TCP)是以中面向连接的、可靠的、基于字节流的传输层通信协议。由IETF的RFC793定义。 TCP通信需要经过创建连接、数据传送、终止连接三个步骤 2、TCP特点 2.1、面向连接 通信双方必须先建立连接才能进行数据的传输

m0_50127633的博客 1249

手把手教你用STM32标准库写一个能OTA升级的Bootloader(附完整代码)

本文详细介绍了如何使用STM32标准库开发支持OTA无线升级的Bootloader系统,包括Flash分区规划、Bootloader核心实现、无线升级流程及安全校验机制。通过实战代码示例,帮助开发者快速掌握STM32固件升级技术,提升物联网设备的远程维护能力。

weixin_30181209的博客 264

【推荐100个unity插件之10】Unity Cinemachine最全的最详细的虚拟相机介绍,详细案例讲解,快速上手

相信很多同学都用过Unity的Cinemachine插件,使用它可以很方便地实现一些摄像机效果,比如摄像机追踪、推拉镜头、分镜等效果。Cinemachine的知识特别的多又很常用,本来是想做一期来讲一下的,结果搜索发现已经有人做过了,而且内容挺全的,但是内容可能比较啰嗦,还有部分没有补充,所以我就先转载下来,后续有时间再优化修改补充,觉得内容不错的,很欢迎大家去支持原作者。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2万+

【socket编程】TCP服务器、UDP服务器、本地套接字【C语言代码实现】

大小端概念、网络字节序和主机字节序、网络套接字函数(socket connect bind accept listen等)、TCP服务器(进程版和线程版)、UDP服务器、本地套接字。这些都是 C语言实现的代码,建议理解并自行敲出来。

crr411422的博客 2410

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2273

利用TCP实现简单聊天程序

TCP通信的特点是面向连接,即通信双方必须先建立连接然后才能进行通信,安全性比较高,保证信息的正确性。 先介绍客户端怎么连接服务器端: 服务器打开某个端口并进行监听,等待客户端连接;客户端根据服务器的IP地址,连接服务器的某个端口。服务器端用ServerSocket(port)打开port端口并监听,客户端用Socket(IP,port)连接服务器端的port端口。在服务器端用accept函数

森伯416的博客 6706

python实现下载和离线安装包环境

导出当前电脑python安装的所有包列表requirement.txt。

m0_60352504的博客 1677

第1章 大数据概述

三次信息化浪潮 信息化浪潮 发生时间 标志 解决的问题 代表企业 第一次 1980年前后 个人计算机 信息处理 Intel、AMD、IBM、苹果、微软、联想、戴尔、惠普等 第二次 1995年前后 互联网 信息传输

wyz191的专栏 7088

python网络编程之——tcp粘包&udp丢包

一、tcp粘包问题产生的原因: 发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 二、两种情况下会发生粘包 1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包) 2.接收方不及时接收缓冲区的...

weixin_40432363的博客 1248

芒果YOLOv5改进05:损失函数IoU 篇之Repulsion Loss:原创改进损失函数 Repulsion:解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv5改进代码实践|结合Repulsion 解决目标遮挡场景下检测🚀

包括YOLOv5、YOLOv7、YOLOv8等模型改进 4566

[Python基础17]网络编程&TCP编程&UDP编程

网络是将我们运行的多台个人PC,通过有线网或者无线网连接起来,方便多台电脑之间的数据传输而出现的,如我们个人PC如果单独使用的时候,只能当成单台电脑运行单机软件,写写文档、看看下载好的电影、玩玩单机游戏等等,如果此时想和其他使用电脑的人说句话~你只能通过张嘴喊话的方式了;如果电脑联网的话,就可以通过飞秋、QQ等各种手段实现,常见的网络都有哪些呢网络根据使用的范围和区域的不同,划分了不同的几个档次单机:单机其实也是一个网络环境,只能访问当前PC的数据,单机的网络IP地址:127.0.0.1局域网。

周小董 850

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

网络编程笔记&UDP协议案例&TCP协议案例

一、网络编程入门: 1.网络编程概述: 计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网 络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 网络编程:在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换 2.网络编程三要素: IP地址: 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收 数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设

zhouyu的博客 276

计算机控制技术及应用

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

DAY16_网络编程概述&UDP协议&TCP协议&网络编程高级

网络编程概述、UDP协议、TCP协议、网络编程高级

m0_57075290的博客 138

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java_第十二章_网络编程——网络编程概述&IP和端口号&TVP和UDP网络通信协议&TCP网络编程&UDP网络编程&URL网络编程

网络编程的目的:直接或间接地通过网络协议与其他计算机实现数据交换,进行通讯*网络通信要素:(1)IP和端口号:IP用于区分不同主机;端口号用于区分一个主机上的不同应用程序(2)网络通信协议:计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

weixin_47687315的博客 353

网络编程:基本概念&udp

ip(修改临时ip): ifconfig ethX X.X.X.X/24 up ifconfig ens33 192.168.0.13/PF_UNIX == AF_UNIX ==>单机程序。SOCK_STREAM 流式套接字 ===》TCP。SOCK_DGRAM 用户数据报套接字===>UDP。SOCK_RAW 原始套接字 ===》IP。port 分为 TCP port / UDP port 范围都是: 1-65535。传输层 ====》端口号tcp udp(使用哪种方式传输,

weixin_71751116的博客 1250

【网络编程】网络套接字&udp通用服务器和客户端

基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位的IP地址,但是我们通常用点分十进制的字符串表示IP地址,以下函数可以在字符串表示和in_addr表示之间进行转换;内存中的多字节数据相比于内存地址有大端和小端之分,磁盘文件中的多字节数据相比于文件中的偏移地址也有大端小端之分,网络数据流同样有大端和小端之分,那么如何定义网络数据流的地址呢?存储在内存中的数据有大端和小端之分,低位存储在低地址的是小端,低位存储在高地址的是大端。

qq_63179783的博客 888

Python中的TCP的客户端&UDP学习----第一篇博客

Python中的TCP的客户端&UDP学习—-第一篇博客 先说UDP流程 发送: 创建套接字 导入socket 创建套接字 确定链接端口 (“链接”,端口) 发送消息 sendto方法 编码用encode 关闭 接收流程: 绑定接收端口 使用bind方法 接收 recvfrom确定接收数据的...

dreamingcrazy的博客 225

【计算机网络_应用层】网络编程套接字&UDP服务器客户端的简单模拟

源IP和目的IP的概念;端口号的理解;TCP和UDP协议的初识;网络字节序的了解;socket编程常见API;sockaddr的结构;简单的UDP服务端和客户端代码实现与测试

weixin_63249832的博客 1169

java架构学习——8. Socket网络通讯基础&TCP协议&UDP协议

一、基本概念 端口号的作用:定位到应用程序。每个端口对应一个唯一的程序。 IP地址的作用:具体定位到某台计算机。在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。 网络模型图: http协议底层使用tcp协议进行连接。 什么是Socket Socket就是为网络服务提供的一种机制。 通讯的两端都有Sokcet 网络通讯其实就是Sok...

wmq_fly的博客 310

python开发socket套接字:粘包问题&udp套接字&socketserver

一,发生粘包 服务器端 1 from socket import * 2 phone=socket(AF_INET,SOCK_STREAM) #套接字 3 phone.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #解决端口占用 4 phone.bind(('127.0.0.1',8080)) #绑定端口和Ip到套接字 ...

weixin_34228662的博客 131

嵌入式Linux网络编程实战:i.MX6ULL平台连接保活、多路复用与资源优化

网络编程是嵌入式Linux开发的核心技术之一,它基于TCP/IP协议栈实现设备间的数据通信。其原理在于通过Socket接口建立连接、发送和接收数据包。在物联网和工业自动化领域,稳定可靠的网络通信对于设备远程管理、数据采集和实时控制具有重要价值。应用场景广泛覆盖智能硬件、边缘计算网关和工业控制器等。针对嵌入式设备资源受限、网络环境复杂的特点,本文聚焦于构建高可靠的实战级网络应用,深入探讨了连接保活与断线重连机制,以及多路复用技术(如poll模型)在i.MX6ULL等ARM平台上的实现,旨在解决现场部署中常见的

weixin_30652491的博客 312

深入Linux网络子系统01:socket() 到底做了什么?

Linux网络编程:socket()函数内核实现解析 本文通过分析socket()函数的内核实现过程,揭示Linux网络子系统的核心工作机制。当用户调用socket()创建TCP套接字时,内核主要完成以下操作: 结构体初始化:通过sock_alloc()分配socket结构体,sk_alloc()分配sock结构体,形成socket(用户层接口)与sock(内核协议栈实体)的对应关系。 协议栈注册:根据协议族(如AF_INET)找到注册的inet_family_ops操作集,调用其create方法(inet

LinuxTechNote的博客 335

VC++实战IPv6报文封装:从协议解析到原始套接字实现

网络协议栈是计算机通信的基石,其核心在于数据包的封装与解析。IPv6作为下一代互联网协议,通过128位地址空间、固定40字节简化报头和模块化扩展头等设计,从根本上解决了IPv4的地址枯竭与扩展性问题,为物联网、高性能音视频传输等场景提供了技术基础。理解其报文结构、流标签、扩展头链等原理,是进行底层网络编程和性能优化的关键。在Windows平台下,借助VC++和Winsock API,开发者可以深入实践从地址处理、结构体定义到校验和计算、原始套接字发送的全过程,从而为工业物联网网关、网络测试工具等应用构建高效

weixin_33928137的博客 405
上一篇: 线程池学习总结
下一篇: TCP网络编程实现聊天室功能代码详解
Java_LXM
博客等级 码龄7年 39粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值