为什么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 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 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 我有一个关于客户端连接到服务器的端口的快速问题 仅从代