通过 TCP 客户端套接字接收数据时出现问题

2024-04-14

我正在尝试用 C 语言编写一个 TCP 客户端程序,客户端将在其中启动,连接到服务器。然后它会发送一些信息,然后监听它收到的信息并做出相应的反应。

我遇到麻烦的部分是持续聆听。这是我所拥有的

...

while (1) {
   numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0);
   buf[numbytes] = '\0';
   printf("Received: %s\n", buf);
   // more code to react goes here
}

...

连接到服务器后,发送两行数据后,服务器应该收到大量信息,但是当我运行它时,它会打印:

已收到:

然后继续坐在那里直到我强迫它关闭。

** 编辑 ** 当我按照乔纳森告诉我做的事情时,我得到以下信息:

计数:-1,错误:111,收到:

所以这意味着它出错了,但我该怎么办呢?


打印出接收到的字节数 - 它可能为零,但请确认这一点。

值得检查一下您是否没有收到错误 - 从而导致缓冲区下溢。

[注:从这里开始就是Pax的作品了——谢谢,并且我已将其转换为社区 Wiki,这样我就不会得到不应有的代表点。]

以下代码将执行此操作。请尝试一下并报告结果。

while (1) {
    numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0);
    buf[numbytes] = '\0';
    printf("Count: %d, Error: %d, Received: %s\n", numbytes, errno, buf);
    // more code to react goes here
}

问题编辑后:

错误号 111 是 ECONNREFUSED - 这不是 recv() 的常见错误代码,但更适合开放类型调用(open()、connect() 等)。

无论如何,ECONNREFUSED 是服务器端的问题,而不是客户端的问题 - 服务器故意拒绝接受您的传入连接,因此您需要调查链接的那一端。

为了测试这一点,请更改您的代码,以便它在端口 80 上连接到 www.microsoft.com,然后发送几行任何旧的垃圾。您应该从他们的 Web 服务器返回一个错误,指示 HTTP 请求格式错误。这将证明您的客户端没有问题。

这就是我回来时得到的telnet www.microsoft.com 80并输入hello其次是ENTER twice:

HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 27 Nov 2008 01:45:09 GMT
Connection: close
Content-Length: 326

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Verb</h2>
<hr><p>HTTP Error 400. The request verb is invalid.</p>
</BODY></HTML>

你应该看到类似的东西。

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

通过 TCP 客户端套接字接收数据时出现问题 的相关文章

随机推荐

  • Android Google 日历“无法启动活动”

    Case 1我主持了 iCal 日历活动 icsAmazon AWS 上的文件及其 HTTP URL 集成在我的 Android 应用程序中 这是文件 https s3 ap southeast 1 amazonaws com endcar
  • 使不同纵横比的响应图像具有相同的高度

    我正在尝试找出一种方法 使响应式图像行具有相同的高度 而不管每个图像的纵横比或容器的宽度如何 实际图像文件的高度相同 但宽度不同 问题是 当容器变小时 在某些宽度下 舍入误差会导致图像的高度相差一个或两个像素 这是一个小提琴http jsf
  • 如何向导航栏添加阴影而不是默认边框

    我想替换默认边框UINavigationBar与阴影 有什么办法可以实现这一点吗 我尝试使用与向 UIView 添加阴影相同的方法 但它增加了导航栏的高度 尝试这个 self navigationController navigationB
  • Angular2创建一个显示外部网页内容的组件

    我需要创建一个显示另一个网页内容的组件 例如 如果我有 stackoverflow 站点 我想创建一个组件来执行 http 请求并通过我的应用程序显示内容 顺便说一下 外部网站只是 django rest swagger 要访问它 我每次访
  • 在 Rails 应用程序中使用自定义函数

    我试图遵循以下关于在 Rails 中使用自定义函数的答案中的简短示例 http stackoverflow com questions 2879679 where to put code snippets in rails 在 lib ma
  • SQL查询大约需要10 - 20分钟

    我有一个选择 没什么复杂的 Select from VIEW 该视图大约有 6000 条记录和大约 40 列 它来自 Lotus Notes SQL 数据库 所以我的 ODBC 驱动程序是 LotusNotesSQL 驱动程序 执行该查询大
  • 如何防止触摸空格键时键盘从数字变为字母?

    I have UITextFields在表格上输入值 其中一些字段只接受数字 我在用UIKeyboardTypeNumbersAndPunctuation对于键盘类型 以及shouldChangeCharactersInRange来过滤字符
  • git 我可以加快提交速度吗?

    我在共享文件夹中有一个大存储库 我在该文件夹的虚拟机中使用 git 一切都很好 但存储库很大 git 正在搜索所有目录和文件 当提交缓慢时 我无法将此存储库移出共享文件夹 我尝试过了git add特定文件和目录 但当我这样做时git com
  • 带有通配符的主干事件

    有没有办法监听命名空间的所有事件 所以当我听到这样的事件时 app vent on notification id function type console lof type 它将监听所有这样的事件 app vent trigger no
  • JavaScript - myArray.forEach 与 for 循环的细微差别

    我看到很多建议使用的问题 for var i 0 i lt myArray length i 代替 for var i in myArray 对于数组 由于迭代不一致 see here https stackoverflow com que
  • 在汇编程序中将十进制转换为二进制

    我的第一个汇编程序需要帮助 我必须将用户输入的值从十进制转换为二进制 我不知道如何将值显示为小数 以及下一步应该做什么 谁能一步一步指导我下一步做什么 model small stack 100h data txt1 db Enter bi
  • 使用 zeep / python 创建 XML 序列

    我正在使用 zeep Python 3 6 与 SOAP API 进行交互 并使用包含此部分的 WSDL 架构
  • 如何从元组列表中提取第 n 个元素

    我正在尝试从元组列表中获取第 n 个元素 我有类似的东西 elements 1 1 1 2 3 7 3 5 10 我希望仅将每个元组的第二个元素提取到列表中 seconds 1 3 5 我知道这可以通过for循环 但我想知道是否还有另一种方
  • 如何使用 xamarin 以编程方式制作按钮?

    我正在尝试使用 xamarin ide c 以编程方式创建按钮 我需要什么代码来创建按钮 设置其大小 设置其文本 设置其背景颜色以及设置其约束 有没有办法将按钮定义为屏幕宽度的 1 4 提前致谢 首先创建按钮 UIButton button
  • JavaScript 中的循环函数

    我是 Javascript 新手 我正在寻找一个循环函数 这是Clojure 的实现 http clojuredocs org clojure core clojure core cycle我试图找到一个循环函数 可以无限循环 递归数组的值
  • Android,通过WLAN通话音频流

    我正计划为 Android 开发我的特定 VoIP 应用程序 这是场景 当接到电话时 我想通过本地电脑扬声器听到打电话的人的声音 并且我想通过我自己的电脑麦克风 耳机与他通话 所以我需要通过无线局域网发送我和我正在通话的人的音频流 像这样的
  • RFC 4648(Base[16,32,64])在 Matlab 中的实现

    有没有任何实施RFC4648 https tools ietf org html rfc4648 Base16 Base32 和 Base64 数据编码 Matlab 中 在 MATLAB 中您可以轻松使用嵌入式Java 功能 http w
  • Kubernetes Node 中的内核内存使用率较高

    我非常绝望地寻找解决方案 我正在 AWS 上运行 Kubernetes 集群 v1 16 7 节点规格为 它是一个亚马逊 EC2 t3 medium实例与4GB RAM和 AMI k8s 1 11 debian stretch amd64
  • YAP Prolog 中的正向链接?

    我需要在某些 Prolog 问题中使用前向链接器 我想避免使用普通元解释器从头开始实现它 但如果没有其他选项可用 这就是我必须要做的 因为使用元解释器执行此操作会很慢 而且我我确信应该有一些好的实现 有人知道 YAP 或 SWI Prolo
  • 通过 TCP 客户端套接字接收数据时出现问题

    我正在尝试用 C 语言编写一个 TCP 客户端程序 客户端将在其中启动 连接到服务器 然后它会发送一些信息 然后监听它收到的信息并做出相应的反应 我遇到麻烦的部分是持续聆听 这是我所拥有的 while 1 numbytes recv soc