问题标签 [sendto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1213 浏览

linux - 结合sento()写writev()?

我设置了一个 udp 套接字,并在每次通话时使用不同的收件人调用 sendto()。

我想使用 writev() 来使 scater/gather io 受益,但 writev() 不允许我像在 sendto() 中那样指定收件人地址/端口。有什么建议么?

0 投票
1 回答
51 浏览

sockets - 如何将我的数据包类的实例拆分为块并使用 socket_sendto 函数发送它们?

我有这样的包

我正在使用 UDP 协议。

0 投票
1 回答
352 浏览

python - Python中的聊天模拟器无法按预期工作

我要做的基本上是使用线程模拟客户端-服务器-客户端聊天。这是到目前为止的代码:

这个想法是一个客户端应该一遍又一遍地向另一个随机发送消息(尚未考虑排除自己)。为此,消息的格式为dest: message,其中是用于从列表dest中选择客户端的随机索引。clients

经过数小时的“调试”,我发现 sendto() 方法将消息发送到所有客户端,而不仅仅是具有指定地址的客户端(如上面的代码那样)。我用错了吗?

此外,当我让客户发送消息时,他们只会立即收到消息。我究竟做错了什么?

我知道这很混乱,对此感到抱歉。我刚开始使用 Python,并且正在测试多种方法以了解它们的工作原理。

谢谢你。- 蟒蛇菜鸟

0 投票
2 回答
694 浏览

c - 如何知道 send() 或 sendmsg() 成功传递消息?

我设置了一个简单的客户端和服务器程序,使用 TCP 套接字进行通信。服务器等待客户端连接并回复是否收到客户端的消息。以下是代码在服务器和客户端中的实现方式:

服务端代码:

客户端代码:

现在,假设我启动了服务器,然后启动了客户端,客户端成功连接到服务器。然后我关闭服务器并尝试从客户端发送消息,write()操作没有返回错误。我在这里期望的是一个错误,因为服务器实际上没有收到任何数据包(它已关闭)。

所以我的问题是:有没有办法知道write()(or send(), sendto()or sendmsg()) 是否成功地将消息传递到服务器?

0 投票
1 回答
203 浏览

c++ - C++:服务器和客户端之间的经典通信练习

再会。

作为一名学习低级 C 编程的计算机科学专业的学生,​​我被困在编写服务器-客户端通信程序的“经典”实践练习中。

目标是开发一个服务器组件,它接收来自远程客户端组件的命令,并将其作为本地 shell 命令执行;然后,命令的输出再次发送到客户端。很简单。

我的代码从客户端发送命令,服务器成功接收它,执行它并捕获输出。但是此时,当所说的服务器尝试将该输出回复给客户端时......出现问题并且客户端什么也没有收到。不知道问题是在服务器部分还是在客户端对应部分。

任何想法?提前致谢!

服务器:

客户:

假设我使用以下命令打印所有痕迹: fprintf(stderr, ""); 因此,由于分叉而失去终端的焦点应该不是问题。

再见,谢谢!

0 投票
1 回答
2127 浏览

linux - sendto() 数据包被内核丢弃

我正在使用这两个 api 来调试程序中的丢包。
观察:

  1. sendto将始终返回数据包大小,因此调用sendto始终成功。
  2. oustandingBytes 达到 2040时,Linux 内核将丢弃数据包,这意味着我无法在 Wireshark 中看到它的数据包。我正在本地 eth 接口上捕获数据包。
  3. 我的sendBuffSize 是 124928,由getsockopt.
  4. 我发送的数据包大小约为 300 到 350 字节。我有两个套接字,一个用于发送 GRE 数据包的原始套接字和另一个 udp 套接字,我看到两种协议的数据包丢失,两个套接字都处于非阻塞模式。
    是否sendto无法检测到错误,因为数据包在达到 sendBuffSize 限制之前被丢弃?
    如何在我的系统中增加 2040 的限制。该值应为 api 返回的 124928 getsockopt()
    对于这个问题,我有类似的线程,如下所示,但是我无法得到答案,所以决定开始一个新线程。
    rawsocket sendto() 一些数据包被丢弃并且在网络中看不到
0 投票
1 回答
75 浏览

sockets - 'sendto()' 函数不会将数据发送到另一台计算机上的应用程序

我使用linux上的posix sockets api在c中编写了一个客户端应用程序,它将信息发送到服务器,然后打印到服务器终端窗口。如果服务器与客户端在同一台机器上,并且客户端发送到环回或它自己的 IP 地址,那么一切都很好。但是,如果服务器在另一台机器上运行,则 sendto 会返回“无效参数”错误。

这是客户端应用程序的代码:

我将非常感谢有关为什么应用程序不会发送到另一台计算机的任何信息!提前致谢!!

0 投票
2 回答
2397 浏览

python - Python - sendto() 的返回值没用吗?

在我最近的项目中,我需要使用UDP协议来传输数据。如果我使用 发送数据size = s.sendto(data, (<addr>, <port>)),UDP协议会确保数据打包成一个UDP数据包吗?如果是这样,将size == len(data)永远是True?有什么我误解了吗?

更准确地说,'sendto()' 会将我的数据分成几个较小的块,然后将每个块打包成 UDP 数据包进行传输?

0 投票
1 回答
14935 浏览

c - sendto:无效的参数

我试图让一个程序(客户端)使用 C 中的套接字与另一个(服务器)通信,但我经常从服务器收到错误“Invalid Argument”。

在解释发生了什么之后,我将尝试显示与此问题相关的代码片段:

对于客户端,我假设一切正常:客户端向服务器发送请求,服务器正确接收消息,但是当服务器尝试回复时,我收到“无效参数”错误。

这是服务器主函数使用的变量的声明:

在这里,我将套接字绑定到 hostAdress:

经过一些代码,我进入一个循环接收信息,以这种方式使用 recvfrom :

当服务器收到请求时,识别它并跳转到这个函数(这个行为被确认):

虽然我知道可以通过 sizeof(clientAdress) 获得“clientAdressLength”,但不知何故这样做解决了我上次遇到的同样问题。该函数声明为:

在这个函数中,主要变量是:

stshort 是一个简单的宏,它在缓冲区的前 2 个字节中放置一个 short int。这按预期工作。

完成后,它会尝试执行以下操作:

......这就是事情出错的时候。sendto 返回-1,并使用perror("sendto");我得到一个“ Invalid Argument”错误。我尝试了一千种不同的方法来估算参数,但我找不到错误。遇到此类问题,我已经用尽了其他选择(即询问我大学的老师并将代码展示给一些更高级的同事),似乎没有人能够找到错误。作为旁注,我确实使用

当服务器接收到要关闭的信号时,但我可能不得不在它设法达到此功能之前强制关闭它一次。

对于正在阅读本文的人,感谢您的宝贵时间!

0 投票
1 回答
547 浏览

c - struct sockaddr.sa_data 似乎太小

我在 Mac OS X 中进行了一些干预(主要是拦截 C 调用),我注意到 ping 应用程序尝试调用 addrlen 值为 16 的 sendto 函数。在 sys/socket.h 中,我可以清楚地看到 sa_data 数组只有最多可容纳 14 个字节:

评论说“实际上更大”让我感到害怕,但我对此无能为力。

无论如何,手册页显示 sendto 函数的签名如下所示:

然后手册页特别指出如果长度值太长而无法以原子方式传递消息时该怎么办。它忽略了 dest_len 大于 dest_addr.sa_data 可以容纳的情况。

如果我尝试将 16 个字节的数据从调用者复制到另一个 dest_addr.sa_data 中,它会失败并且应用程序会崩溃,这是应该的。我是否误解了该字段的使用方式?为什么标题中的注释说“实际上更大”但随后为数组分配了固定大小?