为什么UDP服务器上的UDP客户端端口会改变

2024-03-30

我一直在关注一个简​​单的 UDP 服务器/客户端教程,发现here http://www.binarytides.com/udp-socket-programming-in-winsock/,我有一个关于客户端连接到服务器的端口的快速问题。

仅从代码来看,很明显服务器和客户端是通过端口 8888 连接的:

客户端.cpp

#define SERVER "127.0.0.1"  //ip address of udp server
#define BUFLEN 512  //Max length of buffer
#define PORT 8888   //The port on which to listen for incoming data

服务器.cpp

#define BUFLEN 512  //Max length of buffer
#define PORT 8888   //The port on which to listen for incoming data

然而,当我实际运行服务器和客户端时,服务器说客户端连接的端口总是不同的:

首次运行(服务器日志):

Note how the port changes Note how the port changes from 8888

第二次运行(服务器日志)

注意端口如何再次变化

为什么连接的端口会从8888改变?


客户端的评论不正确。他们只是从服务器复制了该行,但他们应该将其更改为:

#define PORT 8888   //The port to send outgoing data to

客户端和服务器都将端口放在一个sockaddr_in结构。服务器在调用时使用此结构bind(),设置监听端口。客户端在调用中使用它sendto(),因此它设置了目标端口。

因为客户从来不打电话bind()要设置特定的本地端口,可以从临时端口范围中任意选择源端口。每个套接字都有一个不同的端口来区分它们。

如果使用固定端口作为客户端的本地端口,则同一台计算机上将无法拥有多个客户端,因为无法知道哪个客户端应该接收来自服务器的传入数据包。因此,固定端口通常用于服务器,随机端口用于客户端。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么UDP服务器上的UDP客户端端口会改变 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • Ember CLI 在生产中失败

    我正在通过 jenkins 部署 Ember CLI 应用程序并使用 nginx 发布它 这是詹金斯构建脚本 npm install bower install node modules ember cli bin ember build
  • preg_replace + UTF-8 在一台服务器上不起作用,但在另一台服务器上起作用

    echo preg match b b iu 由于某种原因 此代码在我测试过的几台服务器上返回 1 但在一台特定服务器上返回 0 PCRE 编译时支持 UTF 8 和 Unicode 属性 可能是什么问题 PHP 使用的 PCRE 版本之间
  • 动画 CALayer 隐藏

    我试图隐藏一个CALayer几微秒后我正在使用CABasicAnimation为隐藏设置动画 目前我正在尝试使用 aLayer setHidden YES CABasicAnimation hideAnimation CABasicAnim
  • Jython :: PythonInterpreter 可以使用哪些模块以及如何添加更多模块

    我正在使用Jython 2 5 3 PythonInterpreter类来评估一些简单的脚本 但是当我需要导入任何非核心模块时 我会得到一个异常 我必须在 CLASSPATH 中添加一些 jython 库 jar 吗 缩小演示问题的代码范围
  • R 2.14 字节编译 - 无法使用 install.packages 进行?

    看来 R 2 14 可以使用开关来字节编译包R CMD INSTALL但我在 install packages 文档中找不到这样的选项 我错过了什么吗 正如它所说 install packages 您可以使用INSTALL opts 将附加
  • 无法捕获 lambda 中的静态变量[重复]

    这个问题在这里已经有答案了 这看起来很奇怪 我可以捕获静态变量 但前提是该变量未在捕获列表中指定 即它隐式捕获它 int main int captureMe 0 static int captureMe static 0 auto lam
  • Oracle APEX:弹出菜单

    我见过在这个应用程序 http apex oracle com pls apex f p 20411 1 888811517916461一个弹出窗口 里面有一个表单 任何人都可以帮助我构建一个这样的弹出窗口 或者是否有任何教程可以让我看到它
  • 在 Less 中组合多个“转换”条目

    我有两个 mixin 它们都转换为 webkit transform rotate deg webkit transform rotate deg scale factor webkit transform scale factor 当我一
  • 导入javafx.scene.control.Alert无法解析

    我在 Eclipse 中遇到以下两个导入错误 import javafx scene control Alert import javafx scene control Alert AlertType 错误是 导入javafx scene
  • 如何以编程方式关闭 VB.NET 中的 ComboBox 下拉菜单?

    在 Windows 窗体应用程序 VB NET 中 我有一个组合框 在某些条件下 当用户打开下拉列表时 我想显示一条警告消息 所有这些都运行良好 在 DropDown 事件中 我检查条件 如果需要 我会显示警告消息 问题是 当用户在警告消息
  • 如何向 Atom 的拼写检查词典添加单词?

    试图从 Atom 的拼写检查器中获得更多功能 但目前的误报使其变得不太有用 如何将单词添加到 Atom 词典中 使其不再显示为拼写错误 该功能已发布版本1 12 of Atom 实施于请求请求 120 https github com at
  • 如何在 Laravel 5.2 中手动发送密码重置请求?

    我想从控制器内手动向特定用户 不是当前登录的用户 发送密码重置请求 我在 Laravel 代码中做了一些挖掘 看来我应该调用postEmail Request request in ResetsPasswords 但我似乎不知道如何访问右侧
  • 如何在 Ruby on Rails 中调用 API(例如 Flickr API)?新手问题

    我正在用 Rails 构建我的第一个应用程序 我想调用 Flickr 的 API 我知道我可以使用 flickr fu rflickr 或其他 gem 但我想自己从头开始学习 比如说 我想打电话flickr photos comments
  • 如何使rails+unicorn记录器线程安全?

    我们一直在使用 unicorn 来部署我们的应用程序 除了 Production log 文件之外 一切都很顺利 由于 unicorn 的设计方式 该文件无法读取 unicorn 的每个实例都写入同一个文件 导致所有行都拼凑在一起 那么有没
  • 下拉时将 UITableView 标题视图展开至弹跳区域

    我已经在标题区域实现了 MKMapView 即使您将表格拖到表格中 我也想将其完全展开到顶部弹跳区 与Foursquare类似 参见示例 我当前的默认标题实现 向下拖动时为灰色弹跳区域 向下拖动表格时 如何使标题中的地图视图适应顶部的可用标
  • Rails Sti:单路径,不同控制器

    参加性传播感染课程 class Page lt ActiveRecord Base belongs to user end class FirstTypePage lt Page end class SecondTypePage lt Pa
  • 如何在IDEone中设置java程序

    我对编码很陌生 迄今为止只使用 bluej 来编写 java 代码 我想改用 IDEone 进行编码 这样我就可以从学校编程课上使用的计算机切换到我的家用计算机 而无需使用 USB 或其他设备将代码从一台计算机复制到另一台计算机 问题是我不
  • 为什么我的标题文本被截断?

    我有一个使用 jQuery mobile 构建的页面 其标题标记如下所示 div h1 The Magnet Puzzle h1 div 我在 Android 和 Windows 手机中对其进行了测试 在这两种手机中 它都会截断标题文本的最
  • 如何将 Excel 工作表复制到另一个 Excel 工作簿中而不在 C# winforms 中打开 Excel 文件?

    在 C Windows 应用程序中 我有很多 Excel 工作簿 我想要的是将工作表从 Excel 工作簿复制到单个工作簿 这是可能的 但我必须打开 Excel 工作簿才能执行此操作 Excel Application app new Ex
  • 为什么UDP服务器上的UDP客户端端口会改变

    我一直在关注一个简 单的 UDP 服务器 客户端教程 发现here http www binarytides com udp socket programming in winsock 我有一个关于客户端连接到服务器的端口的快速问题 仅从代