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

UDP中connect的作用

udpclientNoConnect.c里边的内容如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include    <errno.h>
#include    <syslog.h>
# define    MAXLINE     4096int main(int argc, char **argv) {if (argc != 3) {printf("usage: udpclient1 <IPaddress> or <Port>");}int socket_fd;socket_fd = socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in server_addr;bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(atoi(argv[2]));inet_pton(AF_INET, argv[1], &server_addr.sin_addr);socklen_t server_len = sizeof(server_addr);struct sockaddr *reply_addr;reply_addr = malloc(server_len);char send_line[MAXLINE], recv_line[MAXLINE + 1];socklen_t len;int n;while (fgets(send_line, MAXLINE, stdin) != NULL) {int i = strlen(send_line);if (send_line[i - 1] == '\n') {send_line[i - 1] = 0;}printf("now sending %s\n", send_line);size_t rt = sendto(socket_fd, send_line, strlen(send_line), 0, (struct sockaddr *) &server_addr, server_len);if (rt < 0) {printf("sendto failed");}printf("send bytes: %zu \n", rt);len = 0;recv_line[0] = 0;n = recvfrom(socket_fd, recv_line, MAXLINE, 0, reply_addr, &len);if (n < 0){if (errno){fprintf(stderr, "recvfrom failed: %s (%d)\n", strerror(errno), errno);}else{printf("recvfrom failed");}}recv_line[n] = 0;fputs(recv_line, stdout);fputs("\n", stdout);}exit(0);
}

上边的代码没有connect函数,gcc udpclienttest.c -o udpclienttest进行编译,./udpclienttest 127.0.0.1 8080执行,然后输入一些内容,完全没有反应。
在这里插入图片描述

接下来来一段有connect函数的代码udpconnectclient.c如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include    <errno.h>
#include    <syslog.h>
# define    MAXLINE     4096int main(int argc, char **argv) {if (argc != 3) {printf("usage: udpclient1 <IPaddress> or <Port>");}int socket_fd;socket_fd = socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in server_addr;bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(atoi(argv[2]));inet_pton(AF_INET, argv[1], &server_addr.sin_addr);socklen_t server_len = sizeof(server_addr);if (connect(socket_fd, (struct sockaddr *) &server_addr, server_len)) {printf("connect failed");}struct sockaddr *reply_addr;reply_addr = malloc(server_len);char send_line[MAXLINE], recv_line[MAXLINE + 1];socklen_t len;int n;while (fgets(send_line, MAXLINE, stdin) != NULL) {int i = strlen(send_line);if (send_line[i - 1] == '\n') {send_line[i - 1] = 0;}printf("now sending %s\n", send_line);size_t rt = sendto(socket_fd, send_line, strlen(send_line), 0, (struct sockaddr *) &server_addr, server_len);if (rt < 0) {printf("sendto failed");}printf("send bytes: %zu \n", rt);len = 0;recv_line[0] = 0;n = recvfrom(socket_fd, recv_line, MAXLINE, 0, reply_addr, &len);if (n < 0){if (errno){fprintf(stderr, "recvfrom failed: %s (%d)\n", strerror(errno), errno);}else{printf("recvfrom failed");}}recv_line[n] = 0;fputs(recv_line, stdout);fputs("\n", stdout);}exit(0);
}

gcc udpconnectclient.c -o udpconnectclient进行编译,./udpconnectclient 127.0.0.1 8080运行,然后尝试着输入字符串,发现输出了连接失败的原因。
在这里插入图片描述

connect函数在UDP中的作用就是报出没有连接的消息,这样的话,可以让客户端知道对端没有接收方运行。
在对 UDP 进行 connect 之后,关于收发函数的使用,很多书籍是这样推荐的:

使用 send 或 write 函数来发送,如果使用 sendto 需要把相关的 to 地址信息置零;
使用 recv 或 read 函数来接收,如果使用 recvfrom 需要把对应的 from 地址信息置零。

其实不同的 UNIX 实现对此表现出来的行为不尽相同。在老师的 Linux 4.4.0 环境中,使用 sendto 和 recvfrom,系统会自动忽略 to 和 from 信息。在老师的 macOS 10.13 中,确实需要遵守这样的规定,使用 sendto 或 recvfrom 会得到一些奇怪的结果,切回 send 和 recv 后正常。

此文章为11月Day 22学习笔记,内容来源于极客时间《网络编程实战》。

相关文章:

UDP中connect的作用

udpclientNoConnect.c里边的内容如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h> #include <errno.h> #include <syslog.h…...

Go使用开源库go-excelize操作Excel文件

以下是一个示例代码&#xff0c;读取一个 Excel 文件并打印其中的所有单元格值&#xff1a; package mainimport ("fmt""github.com/30x/go-excelize" )func main() {// 打开 Excel 文件f, err : excelize.OpenFile("yourfile.xlsx")if err ! n…...

软件测试个人求职简历该怎么写,模板在这里

1、个人资料 姓名&#xff1a;xxx性别&#xff1a;x 手机号码&#xff1a;138888888xx邮箱&#xff1a;xxx 学历&#xff1a;本科专业&#xff1a;电子商务 英语&#xff1a;四级当前工作&#xff1a;测试工程师 从业时间&#xff1a;4年期望薪资&#xff1a;面议 求职意向软件…...

opencv-Hough 圆环变换

Hough 圆环变换&#xff08;Hough Circle Transform&#xff09;是一种用于在图像中检测圆环的技术。与 Hough 直线变换类似&#xff0c;它通过在参数空间中表示图像中的圆环&#xff0c;将圆环检测问题转换为参数空间的累加问题。OpenCV 提供了 cv2.HoughCircles() 函数来执行…...

福州大学《嵌入式系统综合设计》实验五:图像裁剪及尺寸变换

一、实验目的 在深度学习中&#xff0c;往往需要从一张大图中裁剪出一张张小图&#xff0c;以便适应网络输入图像的尺寸&#xff0c;这可以通过bmcv_image_crop函数实现。 实践中&#xff0c;经常需要对输入图像的尺寸进行调整&#xff0c;以适用于网络输入图片尺寸&#xff0…...

LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO

论文题目&#xff1a;《Black-Box Prompt Optimization: Aligning Large Language Models without Model Training》 论文链接&#xff1a;https://arxiv.org/abs/2311.04155 github地址&#xff1a;https://github.com/thu-coai/BPO BPO背景介绍 最近&#xff0c;大型语言模…...

chatglm3部署使用

chatglm3部署使用 1.部署2.使用3.接入微信4.vue前端 1.部署 1.首先去github下载chatglm3代码。Huggingface下载模型一直失败&#xff0c;所以用阿里的魔塔社区下载。 git clone https://github.com/THUDM/ChatGLM3.git git clone https://www.modelscope.cn/ZhipuAI/chatglm3…...

Android扫码ZXing

1. 获取权限 请注意动态申请及重写申请结果返回方法。 <uses-permission android:name"android.permission.CAMERA"/> 2. 添加依赖 //Gradle Scripts -> build.gradle(Module:app) implementation com.google.zxing:core:3.4.1 implementation com.jour…...

求解Beamforming-SOCP(CVX求解)

时间&#xff1a;2023年11月23日14:00:16&#xff1a; 直接上代码&#xff08;辛苦两天才改出来的&#xff09; clear all; K 4; %user number N4; %base station number var1e-9; H []; %initialize H matrix for i1:Kh 1/sqrt(2*K)*mvnrnd(zeros(N,1),eye(N),1)1i/sqrt(2*…...

解决Vue项目的runtime-only转为runtime-compiler

我们在vue.config.js中添加上 runtimeCompiler: true,然后再将main.js入口文件中的Vue实例改为以下即可 //修改前 new Vue({router,store,render: (h) > h(App) }).$mount(#app) //修改后 new Vue({el:#app,router,store, components:{App}, template:<App/>})...

hash模式和history模式

在Vue Router中&#xff0c;有两种路由模式可供选择&#xff1a;hash模式和history模式。它们各自有一些优点和缺点&#xff0c;下面是它们的简要介绍&#xff1a; hash模式的原理是通过hashchange事件&#xff0c;通过监听hash变化来驱动界面变化。它的url中有 # 号 1、监听…...

聊聊logback的LevelFilter

序 本文主要研究一下logback的LevelFilter AbstractMatcherFilter ch/qos/logback/core/filter/AbstractMatcherFilter.java public abstract class AbstractMatcherFilter<E> extends Filter<E> {protected FilterReply onMatch FilterReply.NEUTRAL;protect…...

mysql 行转列 GROUP_CONCAT 试验

1.概要 很多时候需要用到行专列的方式做数据分析。比如对通讯数据的采集 数据采集结果如下&#xff1a; 变量值采集周期131251132272 我想要看的结果 变量1变量2采集周期351372 就是我想看到相关数据的周期变化情况。 2.试验 2.1创建数据如下&#xff08;表名 tb5&…...

HarmonyOS元服务开发实战—端云一体化开发

还记得我第一次接触arkui还是在22年的9月份&#xff0c;当时arkui还在一个比较初试的阶段。时隔一年再见方舟框架&#xff0c;它已经发生了令人瞩目的变化&#xff0c;不得不说华为方舟框架在更新迭代的速度已经遥遥领先。新的功能和性能优化让这个框架更加强大和灵活&#xff…...

【搭环境】装Python3.8 open3d

先装Python3.8 方法一试了找不到Python3.8的库&#xff0c;所以用方法二装上了。 Python3加入环境变量 更改Python默认指向 open3d需要Python3.6以上&#xff0c;最好用Ubuntu18版本&#xff0c;我用的16版本。。...

【C语言】深入解开指针(四)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…...

AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU

全球半导体解决方案供应商瑞萨电子&#xff08;TSE&#xff1a;6723&#xff09;宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B&#xff0c;扩展32位微控制器&#xff08;MCU&#xff09;产品线。新产品作为广受欢迎的RX产品家族的一员&#xff0c;具有高精度模拟前…...

切面Aspect + 策略模式实现待办提醒功能

1.背景 产品需要实现一个待办提醒功能&#xff0c;就是核心业务发生变更即提醒业务员去处理相关业务。譬如&#xff1a;订单上传了支付凭证&#xff0c;那么就会提醒相关业务员去待办列表操办。 2.表设计 其实表设计主要是两张表sys_todo、sys_todo_detail 一张是待办核心表…...

SAP 调取http的x-www-form-urlencoded形式的接口

一、了解下x-www-form-urlencoded形式对于SAP来说有啥区别 简单来说&#xff0c; 1.raw格式就是标准的json格式&#xff1a;{“Name”:“John Smith”&#xff0c;“Age”: 23} 2.x-www格式是要转化一下的&#xff1a;NameJohnSmith&Age23 字段与字段相互连接要用 & 符…...

thingsboard3.6的mailConfigTemplateController错误

1、bug内容 使用3.6版本的tb代码进行打包生成boot的jar包,在启动的时候会报错mailConfigTemplateController bean初始化找不到文件路径。 Error creating bean with name mailConfigTemplateController defined in URL [jar:file:/D:/yuxinwei/AE/thingsboard/thingsboard-3…...

SAP EWM收货实操:从ERP采购单到仓库上架,手把手配置传输队列与避坑

SAP EWM收货实战&#xff1a;从ERP采购单到仓库上架的完整链路与高阶配置 当ERP系统中的采购订单转化为仓库货架上的实物库存&#xff0c;中间隐藏着一条由数十个技术节点串联而成的精密流水线。作为SAP EWM实施顾问&#xff0c;我曾目睹太多项目因传输队列配置失误导致收货流程…...

别再为YOLOv8-Pose数据集发愁了!手把手教你用CVAT标注COCO格式关键点(附可视化代码)

从零构建YOLOv8-Pose数据集&#xff1a;CVAT标注全流程与实战技巧 当我们需要在特定场景下训练高精度的人体姿态估计模型时&#xff0c;现成的公开数据集往往难以满足需求。本文将带你完整走通从原始图像到可训练数据集的全部流程&#xff0c;重点解决标注过程中的实际痛点。 1…...

深入浅出:用Xilinx OSERDES2/ISERDES2原语实现CameraLink编解码,对比专用芯片方案怎么选?

CameraLink实现方案深度对比&#xff1a;FPGA原语与专用芯片的技术抉择 在工业视觉和医疗成像领域&#xff0c;CameraLink接口凭借其稳定可靠的高速数据传输能力&#xff0c;成为众多专业设备的首选。当工程师面临CameraLink接口实现方案选择时&#xff0c;往往陷入两难&#x…...

摄影后期必备:芋田图像工具箱如何提升你的工作流效率

对于摄影爱好者和职业摄影师而言&#xff0c;拍摄只是工作的开始。 真正耗费时间和精力的&#xff0c;往往是后期处理这一环节。 从数百张照片中挑选出满意的作品&#xff0c;再进行格式转换、添加水印、压缩导出&#xff0c;整个流程繁琐且耗时。 如何优化摄影后期工作流&…...

Windows热键冲突完全手册:精准定位与彻底解决指南

Windows热键冲突完全手册&#xff1a;精准定位与彻底解决指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 在Windows操作…...

你的样本量够吗?WGCNA分析前必须搞清楚的5个关键问题与实战策略

WGCNA分析前的5个关键评估&#xff1a;如何避免无效分析并优化实验设计 当你第一次听说WGCNA这个强大的共表达网络分析工具时&#xff0c;可能已经迫不及待想在自己的数据集上尝试。但先别急着运行代码——我见过太多研究者因为前期准备不足&#xff0c;花费数周时间却得到毫无…...

OpenRGB:3步实现跨品牌RGB灯光统一控制,告别软件冲突烦恼

OpenRGB&#xff1a;3步实现跨品牌RGB灯光统一控制&#xff0c;告别软件冲突烦恼 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/O…...

IDM无限试用完整指南:彻底解决30天限制的终极方案

IDM无限试用完整指南&#xff1a;彻底解决30天限制的终极方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否正在为IDM&#xff08;Internet Download Manager&#xff09;的…...

别再折腾yum了!手把手教你用tar.xz包在CentOS 7上安装MySQL 8.0(含mariadb冲突解决)

告别依赖冲突&#xff1a;CentOS 7下MySQL 8.0二进制部署全指南 当你在CentOS 7服务器上准备部署MySQL 8.0时&#xff0c;系统自带的MariaDB往往会成为第一个拦路虎。传统的yum安装方式虽然简单&#xff0c;但版本锁定和依赖冲突问题常常让运维人员头疼不已。本文将带你绕过这些…...

免费多语言编程学习资源大集合:含书籍、课程、播客,点击即享!

资源查找 你可以在 https://ebookfoundation.github.io/free-programming-books-search/ 搜索该列表。此页面以易于阅读的网站形式呈现&#xff0c;点击即可访问。 资源简介 该列表最初是 StackOverflow "免费编程书籍列表"的复刻版本&#xff0c;由 Karan Bhangui 和…...