如何用C语言创建UDP服务器?

2024-02-09

我正在尝试用 C 语言(在 Linux 下)编写一个 UDP 服务器。我知道在socket()我必须使用的功能SOCK_DGRAM并不是SOCK_STREAM.

if ( (list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ) 
{
    fprintf(stderr, "ERROR");
}

但是现在,当我尝试运行该程序(编译没有错误)时,它说有一个错误listen()。这是对它的调用:

if (listen(list_s, 5) < 0)
{
    fprintf(stderr, "ERROR IN LISTEN");
    exit(EXIT_FAILURE);
}

你能找出问题所在吗?这是代码:

int       list_s;                /*  listening socket          */
int       conn_s;                /*  connection socket         */
short int port;                  /*  port number               */
struct    sockaddr_in servaddr;  /*  socket address structure  */

if ( (list_s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0 ) 
{
    fprintf(stderr, "ERROR\n");
}

memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family      = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port        = htons(port);

if ( bind(list_s, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 )
{
    fprintf(stderr, "ERROR IN BIND \n");
}

if ( listen(list_s, 5) < 0 )      // AL POSTO DI 5 LISTENQ
{
    fprintf(stderr, "ERROR IN LISTEN\n");
    exit(EXIT_FAILURE);
}

你不能listen在数据报套接字上,它根本就没有定义。你只需要bind并开始循环阅读。

作为一个简短的解释,listen通知操作系统它应该期望连接在那个套接字上,并且您稍后将接受它们。显然,这对于数据报套接字没有意义,因此会出现错误。


旁注:你应该尝试使用perror打印此类错误。在这种情况下,它(可能)会说不支持操作.

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

如何用C语言创建UDP服务器? 的相关文章

随机推荐

  • 如何使用 Entity Framework 4.1 将连接字符串传递给数据库优先 DBContext 的构造函数?

    由于各种原因我想not将我的实体框架数据库模型的连接字符串存储在各种 config 文件之一中 我将最新最好的 DBContext API 与新的实体框架版本 4 1 NET 4 和 Visual Studio 2010 C 结合使用 但是
  • 为什么重写的函数首先被调用?

    我执行了以下程序 我对得到的输出感到好奇 其中函数输出首先被打印 即使它是我尝试首先打印的变量 class Baap public int h 4 public int getH System out println Baap h retu
  • 生产环境中无法解释的 SQL 错误 - 可能与网络相关

    我正在做一些相当密集的数据库工作 最终将很多很多记录插入到数据库中 为了尽量减少上下文膨胀 我一次执行 100 个插入 处理上下文 然后重新创建上下文 我收到一些我不明白的奇怪错误 这些错误仅发生在我们的生产服务器上 但在开发服务器上一切正
  • iOS 9 CollectionView 速度变慢

    我一直在为 iOS8 开发我的应用程序 并且在滚动速度方面还没有遇到任何问题 当我升级到 iOS9 时 collectionView 变得非常不稳定和令人震惊 我无法指出任何具体原因 在我的集合视图中 我的项目包含使用第 3 方库 SDWe
  • 如何检测 WiFi 网络共享状态

    我想知道如何检测 WiFi 网络共享的状态 我看过一篇文章 Android 2 3 wifi热点API https stackoverflow com questions 7048922 android 2 3 wifi hotspot a
  • 检查字符串是否在 python 中的 2 GB 字符串列表中

    我有一个大文件 A txt 2 GB 包含字符串列表 Question Q1 Q2 Q3 Ans1 Format links 现在我有另一个更大的文件 1TB 其中第二个位置包含上述字符串 Output a Question b The q
  • Java 8 流 - 对象的总和

    假设我有一个实现以下接口的对象列表 public interface Summable
  • Pytorch 张量索引:如何通过包含索引的张量收集行

    我有张量 ids 形状 7000 1 包含索引 例如 1 0 2 x 形状 7000 3 255 ids张量编码粗体标记维度的索引x应该选择哪个 我想将选定的切片收集到结果向量中 result 形状 7000 255 背景 我对这 3 个元
  • 关于 Arm 处理器上的 conda 发行版/通道的混乱

    我已经使用 Anaconda 几年了 但自从我开始使用带有 M1 处理器的 Mac 以来 我不得不处理一些软件包安装的一系列问题 这让我对一些基本概念有点困惑 例如 我试图安装 Tensorflow 结果发现正确的方法是安装 minifor
  • 使用 psycopg 准备的语句

    我是 python 的初学者 我们使用此代码来执行 SQL 命令 cur execute INSERT INTO test num data VALUES s s 100 abcdef 我想知道这是准备好的声明还是只是客户端引用 不 不是
  • 为什么使用隐式解包或强制解包让应用程序在某个阶段崩溃没有好处?

    我的观点是 在某些地方 我们知道该变量根本不会为零 但由于某种原因 我们无法在类的 init 函数中实例化它 因此我们必须将其设为可选 我也知道我们可以使用可选的绑定或防护技术来轻松摆脱它 但在我看来 由于隐式解包 强制解包而让应用程序因一
  • 在 asp.net 中使用对象标签

    我有这个 html 代码 用于在 aspx 页面中嵌入视频
  • Java 线程和核心数

    我只是有一个关于处理器和线程如何工作的快速问题 根据我目前的理解 一个核心一次只能执行1个进程 但是我们能够生成一个数量大于我们拥有的核心数量 假设为 4 的线程池 假设为 30 并让它们同时运行 如果我们只有 4 个核心 这怎么可能 我还
  • 如何让onDragListener和onTouchListener协同工作?

    我使用 onDragListener 在屏幕上拖动一个对象 这部分效果很好 但我还需要在拖动时检查屏幕的 x y 坐标 我重写了 onTouch 方法 它也运行良好 但是一旦我拖动对象 ontouch 侦听器就不起作用 我无法让两个听众一起
  • Android 5.0 模拟器显示存储空间耗尽

    我刚刚将 Android SDK 更新到版本 21 并尝试启动模拟器 我使用的是 Nexus 4 其 CPU Intelatom x86 768 RAM 和 524 内部存储 模拟器启动正常 但显示错误消息 存储空间耗尽 并且速度非常慢 我
  • 如何在安全沙箱中运行不受信任的 Ruby 代码?

    我希望能够运行不受信任的 ruby 代码 我希望能够将变量传递给它可能使用的不受信任的代码 我还希望上述代码返回结果给我 这是我的想法的一个概念示例 input sweet output nil Thread start SAFE 4 un
  • PHP - array_map 比 foreach 更快吗? [复制]

    这个问题在这里已经有答案了 就性能而言 哪个是更好的选择 在对象中时 Case 1 public function test array return array map array this do something to element
  • clang 似乎使用 gcc 库

    这是我第一次使用clang 我注意到 clang 引用 std 库的任何错误都如下所示 usr bin lib gcc x86 64 linux gnu 4 8 include c 4 8 ostream 245 7 所以它看起来像 cla
  • C++:在堆栈中存储结构

    我有一个结构 struct Vehicle char ad Arrival departure char string license license value int arrival arrival in military time 我
  • 如何用C语言创建UDP服务器?

    我正在尝试用 C 语言 在 Linux 下 编写一个 UDP 服务器 我知道在socket 我必须使用的功能SOCK DGRAM并不是SOCK STREAM if list s socket AF INET SOCK DGRAM IPPRO