Unix C 套接字服务器不接受连接

2024-03-04

事情是这样的,我正在用 C 语言(使用 unix 系统调用)编写一个简单的 tcp 套接字服务器,但我无法接受连接。

据我所知,我很好地完成了服务器初始化,但是当我尝试连接到我打印出来的端口(参见下面的代码)时,它拒绝了,就好像什么都没有一样。

更重要的是,当我 netstat 时,该端口甚至没有在使用中。我不会在当前的设置中抛出任何错误,我已经没有想法了。

int main(){

    int sock_fd;
    int conn_fd;
    struct sockaddr_in serv_addr;
    struct sockaddr_in cli_addr;
    socklen_t* serlen;
    socklen_t* clilen;
    clilen  = malloc(sizeof(socklen_t));
    serlen  = malloc(sizeof(socklen_t));
    *serlen = sizeof(serv_addr);
    *clilen = sizeof(cli_addr);

    /*=============================Create Socket=============================*/


        //Create Socket
        sock_fd = socket(AF_INET, SOCK_STREAM, 0);
            if(sock_fd<0){
                fprintf(stderr,"error creating socket\n");
                exit(1);}

        //Initialize Server Address Struct
        bzero((char *) &serv_addr, *serlen);
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = INADDR_ANY;
        serv_addr.sin_port = 0;

    /*=============================Bind Address==============================*/

        //Bind socket to an address
        if(bind(sock_fd,(struct sockaddr*)&serv_addr,*serlen)<0){
            fprintf(stderr,"error binding\n");
            exit(1);}

        //Get socket data
        if(getsockname(sock_fd,(struct sockaddr*)&serv_addr, serlen)<0){
            fprintf(stderr,"error with socket name");
            exit(1);}

    /*=============================Server Started============================*/

        //Listen for connections
        listen(sock_fd,32);

        //Print port
        printf("%i", serv_addr.sin_port);

        conn_fd = accept(sock_fd,(struct sockaddr*)&cli_addr,clilen);

        /**Do something exciting with my new connection**/

}

您真的想监听端口零吗?尝试使用较高的端口号,最好> 1024。/etc/services 将给出有关可用端口的提示 - 但它只是一组注释,这些端口号不是强制执行的。

编辑:另一个提示。端口号应该是网络订单,所以作业应该使用htons()。您获得的“随机数”可能是看起来乱码的简单数字,因为您可能使用的是小端机器(如英特尔)。当您打印它们时,使用以下命令将它们转换回来ntohs().

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

Unix C 套接字服务器不接受连接 的相关文章

  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 为什么不能调用带有 auto& 参数的 const mutable lambda?

    include
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • C++ 到 C# 事件处理

    所以我有我的C WinForm 应用程序 我从中调用我的C CLI MFC dll图书馆 但也有一些events在我的 C 库上 甚至此事件也发生在该库的本机 非 CLI 部分 我需要从我的 C 应用程序调用一些代码 并获取一些有关此事件的
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • 如何在html中设置自定义光标?

    我想为我的网站使用自定义光标图标 永久 我该怎么做 光标被下载为一个简单的 ico文件 我尝试过自定义光标命令 但它似乎不起作用 html body cursor url cursor ico default just change the
  • 是否可以将外部 bean 配置 xml 文件导入 resources.groovy 中?

    在我当前的 grails 应用程序中 我在 resources groovy 中定义了 spring beans 现在我还有一个 xml 文件 其中已经定义了一堆 bean 我想按原样使用它们 而不是在 bean dsl 中重新创建每个 b
  • 使用 Jenkins 共享库作为类

    我有一个 Jenkins 文件 我正在尝试从我的共享库实例化一个常规类 我得到 无法解决类测试 我在共享库中有一个 src com org foo groovy 文件 package com org class Test implement
  • Cesium地图可以在Apache HTTP服务器而不是node.js环境上运行吗?

    我有一个 Apache HTTP 服务器 可以处理我对 Ruby on Rails 项目的所有请求 我们正在考虑添加 Cesium 地图组件 我想知道是否可以在 Apache HTTP 服务器上运行 Cesium 而不是设置 node js
  • 在 Android 1.5 上运行应用程序时出现 NotFoundException 和 FileNotFoundException

    我正在尝试将 android 1 6 应用程序向后移植到 android 1 5 遵循此处的建议 http comments gmane org gmane comp handhelds android devel 97051 http c
  • Python Matlab 引擎安装

    我一直在尝试为 python 安装 matlab 引擎 这样我就可以从 python 脚本中调用 matlab 函数 我使用的指南是这个 http uk mathworks com help matlab matlab external i
  • 如何以编程方式删除 UINavigationbar 提示?

    我有一个视图控制器 我在IB中设置了带提示的导航栏 但有时我想删除提示并将栏设为 1 行 我怎样才能在代码中做到这一点 self navigationItem setPrompt nil 这会以动画方式删除提示
  • Webpack 动态 require 和 require 语句中的加载器

    是否可以使用动态require and require context在 require 语句中使用显式加载器 我希望能够做这样的事情 但这对我不起作用 var req require context somedir false js va
  • 如何在 linq 中使用 groupby 时进行多重连接

    我的数据库中有一个图片评级表 对于每个新的评级 都会创建一个新的图片评级表行 我将按上周和图片 ID 对这些评分进行分组 这意味着上周一张图片的所有评分将被累积并成为一个评分 然后我将能够按其计数对它们进行排序 这是我的图片评级表 publ
  • 如何在 celery 内为每个用户生成队列?

    因此 我尝试将 Web 请求中的阻塞内容移至后台任务并利用队列 我对消息传递和发布 订阅也很陌生 用户将数据推送到那里并进行处理 稍后用户会收到相关通知 我为此做了一个 celery 设置 发现它不能满足我为每个用户分配自己的任务的专用队列
  • Android 和设置(图像)视图 alpha 的 alpha

    真的没有对应的 XML 属性吗 setAlpha int 如果没有 还有哪些替代方案 它比其他响应更容易 有一个xml值alpha需要双值 android alpha 0 0 那是看不见的 android alpha 0 5 透视 andr
  • Rails 5.2 中单独的secret_key_base?

    我刚刚从 5 1 升级到 5 2 我对这种 更好 的存储秘密的方法感到很困惑 也许我不明白 但现在开发和生产似乎已经 合并 成一个单一的SECRET KEY BASE也master key 它是否正确 如果没有 我如何使用单独的主密钥和SE
  • 使用 Firebase-PHP 验证 Firebase ID 令牌

    我正在使用 Firebase Auth 在以 PHP 编码的网络应用程序上授权用户 授权本身是用 Javascript 进行的 它在 Ajax 请求上执行以验证用户是否已登录 要在我已经实现的服务器上使用 Firebase AdminFir
  • 当我单击屏幕上的其他位置时,按钮的底部边框消失

    fiddle https jsfiddle net bbvxnsyo 这是我的 HTML 代码
  • 基于偏好的分组算法

    我正在寻找一种方法来根据偏好将人们分类 例如 假设有 100 名学生 每人将被分配到以下五个班级之一 科学 40 个座位 数学 15 个席位 历史 15 个席位 电脑 20 个座位 写作 10 个座位 每个学生都有三个按偏好排序的首选课程
  • 为 std::shared_ptr 分配内存的正确方法

    我已经实现了一个功能 其中身份被赋予给我并且不受我的控制 它返回std shared ptr
  • 使用 GraphQL 机制,但返回 CSV

    普通的 REST API 可能会让您以不同的格式请求相同的数据 并使用不同的Accept标头 例如application json or text html or a text csv格式化的响应 但是 如果您使用 GraphQL 则 JS
  • OpenGL ES 1.1:如何在不损失亮度的情况下更改纹理颜色?

    我希望能够在代码中更改粒子的颜色 因此可以使用任何颜色 所以我只有一种基本上具有亮度的纹理 我一直在使用glColor4f 1f 0f 0f 1f 应用颜色 我尝试过的每个 Blendfunc 都接近工作 最终都像下面的最后一张图片一样 我
  • 向下滚动到div+一定的边距

    我正在使用此脚本滚动到页面上的某个 div button click function html body animate scrollTop scrolltothis offset top 500 工作完美 这会将页面滚动到 scroll
  • Unix C 套接字服务器不接受连接

    事情是这样的 我正在用 C 语言 使用 unix 系统调用 编写一个简单的 tcp 套接字服务器 但我无法接受连接 据我所知 我很好地完成了服务器初始化 但是当我尝试连接到我打印出来的端口 参见下面的代码 时 它拒绝了 就好像什么都没有一样