当前位置: 首页 > news >正文

C语言实现Linux下的UDP服务端和客户端

程序实现了UDP服务端和客户端,客户端发送消息后等待服务端响应。

udp_server.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>

#define LISTEN_PORT 12345
#define BUFFER_SIZE 1024

int main() {
    int sockfd;
    struct sockaddr_in listen_addr, client_addr;
    socklen_t addr_len;
    char buffer[BUFFER_SIZE];
    char message[BUFFER_SIZE];

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("socket");
        exit(1);
    }

    // 设置监听地址信息
    memset(&listen_addr, 0, sizeof(listen_addr));
    listen_addr.sin_family = AF_INET;
    listen_addr.sin_port = htons(LISTEN_PORT);
    listen_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    // 绑定套接字到监听地址
    if (bind(sockfd, (struct sockaddr *)&listen_addr, sizeof(listen_addr)) < 0) {
        perror("bind");
        exit(1);
    }

    printf("waiting...\n");

    while (1) {
        // 接收消息
        addr_len = sizeof(client_addr);
        if (recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &addr_len) < 0) {
            perror("recvfrom");
            exit(1);
        }

        printf("receive: %s", buffer);

        // 检查是否退出
        if (strcmp(buffer, "exit\n") == 0) {
            printf("Bye\n");
            break;
        }

        // 读取服务器端的回复消息
        printf("input reply: ");
        fgets(message, BUFFER_SIZE, stdin);

        // 发送回复消息给客户端
        if (sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&client_addr, addr_len) < 0) {
            perror("sendto");
            exit(1);
        }
    }

    // 关闭套接字
    close(sockfd);

    return 0;
}

udp_client.c:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>

#define DEST_IP "127.0.0.1"
#define DEST_PORT 12345
#define BUFFER_SIZE 1024

int main() {
    int sockfd;
    struct sockaddr_in dest_addr;
    char buffer[BUFFER_SIZE];
    char message[BUFFER_SIZE];

    // 创建套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd < 0) {
        perror("socket");
        exit(1);
    }

    // 设置目的地址信息
    memset(&dest_addr, 0, sizeof(dest_addr));
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(DEST_PORT);
    dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);

    while (1) {
        // 读取用户输入
        printf("input: ");
        fgets(message, BUFFER_SIZE, stdin);

        // 发送消息
        if (sendto(sockfd, message, strlen(message), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) < 0) {
            perror("sendto");
            exit(1);
        }

        // 检查是否退出
        if (strcmp(message, "exit\n") == 0) {
            printf("Bye\n");
            break;
        }

        // 接收回复消息
        if (recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL) < 0) {
            perror("recvfrom");
            exit(1);
        }

        printf("receive: %s", buffer);
    }

    // 关闭套接字
    close(sockfd);

    return 0;
}

相关文章:

C语言实现Linux下的UDP服务端和客户端

程序实现了UDP服务端和客户端&#xff0c;客户端发送消息后等待服务端响应。 udp_server.c: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> …...

Excel小技巧 (2) - 如何去除和增加前导0

1. 如何去除前导0 公式&#xff1a;SUBSTITUTE(A2,0,"")&#xff0c;然后拖动十字架&#xff0c;同步所有列数据&#xff0c;轻松搞定。 2. 如何补充前导0 公式&#xff1a;TEXT(D2,"0000000") &#xff0c;0的个数是数字的完整位数。然后拖动十字架&a…...

【GIS人必看】ArcPy脚本如何导入到ArcToolBox中(上)【建议收藏】

经常使用ArcGIS的朋友应该知道&#xff0c;ArcGIS平台可以支持非常丰富的全栈链二次开发&#xff0c;比如ArcPy脚本开发、ArcGIS Engine桌面端开发、ArcGIS AddIn插件开发、WebGIS开发、移动端GIS开发等。当然&#xff0c;这些技术本人全部精通&#xff0c;后面会给大家陆续介绍…...

AI入门笔记(三)

神经网络是如何工作的 神经网络又是如何工作的呢&#xff1f;我们用一个例子来解释。我们看下面这张图片&#xff0c;我们要识别出这些图片都是0并不难&#xff0c;要怎么交给计算机&#xff0c;让计算机和我们得出同样的结果&#xff1f;难点就在于模式识别的答案不标准&…...

Linux搭建SFTP服务器

案例&#xff1a;搭建SFTP服务器 SFTP&#xff08;SSH文件传输协议&#xff09; SFTP&#xff08;SSH文件传输协议&#xff09;是一种安全的文件传输协议&#xff0c;用于在计算机之间传输文件。它基于SSH&#xff08;安全外壳协议&#xff09;的子系统&#xff0c;提供了加密的…...

MobaXterm无法上传整个文件夹,只能上传的单个文件

问题描述&#xff1a; 本来想使用MobaXterm上传.vscode文件夹上传到服务器&#xff0c;但是选择文件夹打开后只能选择文件夹下面的子文件无法上传整个文件。 解决方案&#xff1a; 1、简单暴力 2、压缩后解压...

Android 中get请求网络数据 详细举例

请求链接 https://api.bilibili.com/x/web-interface/ranking 1.添加网络权限 依赖等 implementation com.squareup.okhttp3:okhttp:4.9.3 implementation com.google.code.gson:gson:2.8.92.写请求类network package com.example.myapplication;import android.graphics.Bi…...

每日五道java面试题之mysql数据库篇(六)

目录&#xff1a; 第一题. MySQL中InnoDB引擎的行锁是怎么实现的&#xff1f;第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁&#xff1f;怎么解决&#xff1f;第四题. 数据库的乐观锁和悲观锁是什么&#xff1f;怎么实现的&#xff1f;第五题. 为什么要使用视图&a…...

Latex——多张图排列

一、方式一&#xff08;subfig 与 subfloat 配合使用&#xff09; % Need&#xff1a;\usepackage{subfig} \begin{figure}[htbp] % \setlength{\abovecaptionskip}{0.2cm} % \setlength{\belowcaptionskip}{-0.5cm} \centering\subfloat[MOT15]{\label{fig:a}\includegrap…...

前端复选框问题-节点赋值未选中最后显示时确变成选中状态?

问题&#xff1a; 前两天一同事请教我&#xff1a;前端复选框问题-节点赋值未选中最后显示时确变成选中状态&#xff1f; 还有就是明明传过为的是false&#xff0c;在控制台上打印确变成选中状态&#xff0c;如下图&#xff1a; 以下是前端vue代码&#xff1a; <Scroll h…...

JavaScript命名标识符规范,前端开发面试

前端的现状 提到现状&#xff0c;必须先提到一个概念 大前端。由于近几年互联网的发展&#xff0c;尤其是移动互联网的发展&#xff0c;有的大前端概念将 Native 归入前端的范畴&#xff0c;有的大前端概念将 Node 甚至只渲染页面的 PHP 归入前端范畴&#xff0c;但不管怎么说…...

从零学习Linux操作系统 第三十部分 部署Anisble

一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…...

C++对象模型剖析(六)一一Data语义学(三)

Data 语义学&#xff08;三&#xff09; “继承” 与 Data member 上期的这个继承的模块我们还剩下一个虚拟继承&#xff08;virtual inheritance&#xff09;没有讲&#xff0c;现在我们就来看看吧。 虚拟继承&#xff08;Virtual Inheritance&#xff09; 虚拟继承本质就是…...

Java 代理模式详解(附案例源代码)

前言 Java代理模式是一种设计模式&#xff0c;在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问&#xff0c;从而提供了一种间接访问实际对象的方法。 代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理…...

七牛云 上传 文件 file is empty

问题 七牛云 上传 文件 file is empty 详细问题 笔者进行Android 开发&#xff0c;使用URI上传文件&#xff0c;上传核心代码 具体报错信息 {ver:8.7.0,ResponseInfo:1709276329412131,status:-6, reqId:, xlog:null, xvia:null, host:null, time:1709276329,error:file is…...

【AI视野·今日Sound 声学论文速览 第五十二期】Tue, 5 Mar 2024

AI视野今日CS.Sound 声学论文速览 Tue, 5 Mar 2024 Totally 18 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers SA-SOT: Speaker-Aware Serialized Output Training for Multi-Talker ASR Authors Zhiyun Fan, Linhao Dong, Jun Zhang, Lu Lu, Zejun M…...

使用 BLAS 调用加快生成的独立代码中的矩阵运算

为了提高某些低级向量生成的代码的执行速度&#xff0c;并 矩阵运算&#xff08;如矩阵乘法&#xff09;在独立代码中&#xff0c;指定您 要MATLAB Coder™生成 BLAS 调用。BLAS 是一个用于低级向量和矩阵计算的软件库&#xff0c;它具有 几个高度优化的机器特定实现。代码生成…...

一台服务器,最大支持的TCP连接数是多少?

一个服务端进程最大能支持多少条 TCP 连接&#xff1f; 一台服务器最大能支持多少条 TCP 连接&#xff1f; 一、原理 TCP 四元组的信息&#xff1a;源IP、源端口、目标IP、目标端口。 一个服务端进程最大能支持的 TCP 连接个数的计算公式&#xff1a;最大tcp连接数客户端的IP…...

微信小程序云开发教程——墨刀原型工具入门(编辑页面)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…...

flutter打包app

Flutter 打包APP &#xff08;Android & IOS&#xff09;_encountered error while building for device.-CSDN博客 使用命令行 keytool -genkey -v -keystore ../key -keyalg RSA -keysize 2048 -validity 10000 -alias key 将在文件根目录上一层生成key文件&#xff0…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...