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里边的内容如下: #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文件
以下是一个示例代码,读取一个 Excel 文件并打印其中的所有单元格值: package mainimport ("fmt""github.com/30x/go-excelize" )func main() {// 打开 Excel 文件f, err : excelize.OpenFile("yourfile.xlsx")if err ! n…...
软件测试个人求职简历该怎么写,模板在这里
1、个人资料 姓名:xxx性别:x 手机号码:138888888xx邮箱:xxx 学历:本科专业:电子商务 英语:四级当前工作:测试工程师 从业时间:4年期望薪资:面议 求职意向软件…...
opencv-Hough 圆环变换
Hough 圆环变换(Hough Circle Transform)是一种用于在图像中检测圆环的技术。与 Hough 直线变换类似,它通过在参数空间中表示图像中的圆环,将圆环检测问题转换为参数空间的累加问题。OpenCV 提供了 cv2.HoughCircles() 函数来执行…...
福州大学《嵌入式系统综合设计》实验五:图像裁剪及尺寸变换
一、实验目的 在深度学习中,往往需要从一张大图中裁剪出一张张小图,以便适应网络输入图像的尺寸,这可以通过bmcv_image_crop函数实现。 实践中,经常需要对输入图像的尺寸进行调整,以适用于网络输入图片尺寸࿰…...
LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO
论文题目:《Black-Box Prompt Optimization: Aligning Large Language Models without Model Training》 论文链接:https://arxiv.org/abs/2311.04155 github地址:https://github.com/thu-coai/BPO BPO背景介绍 最近,大型语言模…...
chatglm3部署使用
chatglm3部署使用 1.部署2.使用3.接入微信4.vue前端 1.部署 1.首先去github下载chatglm3代码。Huggingface下载模型一直失败,所以用阿里的魔塔社区下载。 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求解)
时间:2023年11月23日14:00:16: 直接上代码(辛苦两天才改出来的) 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中,有两种路由模式可供选择:hash模式和history模式。它们各自有一些优点和缺点,下面是它们的简要介绍: hash模式的原理是通过hashchange事件,通过监听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.概要 很多时候需要用到行专列的方式做数据分析。比如对通讯数据的采集 数据采集结果如下: 变量值采集周期131251132272 我想要看的结果 变量1变量2采集周期351372 就是我想看到相关数据的周期变化情况。 2.试验 2.1创建数据如下(表名 tb5&…...
HarmonyOS元服务开发实战—端云一体化开发
还记得我第一次接触arkui还是在22年的9月份,当时arkui还在一个比较初试的阶段。时隔一年再见方舟框架,它已经发生了令人瞩目的变化,不得不说华为方舟框架在更新迭代的速度已经遥遥领先。新的功能和性能优化让这个框架更加强大和灵活ÿ…...
【搭环境】装Python3.8 open3d
先装Python3.8 方法一试了找不到Python3.8的库,所以用方法二装上了。 Python3加入环境变量 更改Python默认指向 open3d需要Python3.6以上,最好用Ubuntu18版本,我用的16版本。。...
【C语言】深入解开指针(四)
🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…...
AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU
全球半导体解决方案供应商瑞萨电子(TSE:6723)宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B,扩展32位微控制器(MCU)产品线。新产品作为广受欢迎的RX产品家族的一员,具有高精度模拟前…...
切面Aspect + 策略模式实现待办提醒功能
1.背景 产品需要实现一个待办提醒功能,就是核心业务发生变更即提醒业务员去处理相关业务。譬如:订单上传了支付凭证,那么就会提醒相关业务员去待办列表操办。 2.表设计 其实表设计主要是两张表sys_todo、sys_todo_detail 一张是待办核心表…...
SAP 调取http的x-www-form-urlencoded形式的接口
一、了解下x-www-form-urlencoded形式对于SAP来说有啥区别 简单来说, 1.raw格式就是标准的json格式:{“Name”:“John Smith”,“Age”: 23} 2.x-www格式是要转化一下的: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收货实战:从ERP采购单到仓库上架的完整链路与高阶配置 当ERP系统中的采购订单转化为仓库货架上的实物库存,中间隐藏着一条由数十个技术节点串联而成的精密流水线。作为SAP EWM实施顾问,我曾目睹太多项目因传输队列配置失误导致收货流程…...
别再为YOLOv8-Pose数据集发愁了!手把手教你用CVAT标注COCO格式关键点(附可视化代码)
从零构建YOLOv8-Pose数据集:CVAT标注全流程与实战技巧 当我们需要在特定场景下训练高精度的人体姿态估计模型时,现成的公开数据集往往难以满足需求。本文将带你完整走通从原始图像到可训练数据集的全部流程,重点解决标注过程中的实际痛点。 1…...
深入浅出:用Xilinx OSERDES2/ISERDES2原语实现CameraLink编解码,对比专用芯片方案怎么选?
CameraLink实现方案深度对比:FPGA原语与专用芯片的技术抉择 在工业视觉和医疗成像领域,CameraLink接口凭借其稳定可靠的高速数据传输能力,成为众多专业设备的首选。当工程师面临CameraLink接口实现方案选择时,往往陷入两难&#x…...
摄影后期必备:芋田图像工具箱如何提升你的工作流效率
对于摄影爱好者和职业摄影师而言,拍摄只是工作的开始。 真正耗费时间和精力的,往往是后期处理这一环节。 从数百张照片中挑选出满意的作品,再进行格式转换、添加水印、压缩导出,整个流程繁琐且耗时。 如何优化摄影后期工作流&…...
Windows热键冲突完全手册:精准定位与彻底解决指南
Windows热键冲突完全手册:精准定位与彻底解决指南 【免费下载链接】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个关键评估:如何避免无效分析并优化实验设计 当你第一次听说WGCNA这个强大的共表达网络分析工具时,可能已经迫不及待想在自己的数据集上尝试。但先别急着运行代码——我见过太多研究者因为前期准备不足,花费数周时间却得到毫无…...
OpenRGB:3步实现跨品牌RGB灯光统一控制,告别软件冲突烦恼
OpenRGB:3步实现跨品牌RGB灯光统一控制,告别软件冲突烦恼 【免费下载链接】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无限试用完整指南:彻底解决30天限制的终极方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 你是否正在为IDM(Internet Download Manager)的…...
别再折腾yum了!手把手教你用tar.xz包在CentOS 7上安装MySQL 8.0(含mariadb冲突解决)
告别依赖冲突:CentOS 7下MySQL 8.0二进制部署全指南 当你在CentOS 7服务器上准备部署MySQL 8.0时,系统自带的MariaDB往往会成为第一个拦路虎。传统的yum安装方式虽然简单,但版本锁定和依赖冲突问题常常让运维人员头疼不已。本文将带你绕过这些…...
免费多语言编程学习资源大集合:含书籍、课程、播客,点击即享!
资源查找 你可以在 https://ebookfoundation.github.io/free-programming-books-search/ 搜索该列表。此页面以易于阅读的网站形式呈现,点击即可访问。 资源简介 该列表最初是 StackOverflow "免费编程书籍列表"的复刻版本,由 Karan Bhangui 和…...
