c - TCP sendto 返回长度但服务器没有收到任何东西

标签 c sockets

我正在尝试重用已连接的套接字 fd。

我已经创建了 connfd 并在初始化代码中将其连接到服务器。 在其他一些功能中,我没有重新连接它,而是直接尝试 connfd..

在服务器上,

connfd = accept(listenfd, (struct sockaddr *)&cliAddr, &len);
recvfrom(connfd, msg, TCP_DATA_LEN, 0, (struct sockaddr *)&cliAddr, &len);

在客户端,

sendto(sockfd, messageString, strlen(messageString), 0, (struct sockaddr *)&servAddr, sizeof(servAddr));

sockfd 来自

socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, (struct sockaddr *)&servAddr, sizeof(servAddr));

但是在服务器上,我没有收到任何东西。

最佳答案

是否每个代码都将“connect()”应用于各自的套接字?

服务器需要先accept() 然后listen() 其中listen() 将返回一个新的套接字。

那个新套接字是用来从客户端接收 recv() 的。

recvfrom() 和 sendto() 用于数据报 (UDP) 套接字而不是 SOCK_STREAM (TCP) 套接字。

所以代码应该使用 send() 和 recv()。

建议阅读代码使用的系统函数的手册页

这里是一个例子的链接,注意这个例子产生了一个线程来处理连接。对于单个连接,线程不是必需的。

http://www.mycplus.com/source-code/c-source-code/tcp-client-and-server/

关于c - TCP sendto 返回长度但服务器没有收到任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29473292/

相关文章:

c++ - 如何转储 DSA_SIG 或 RSA_SIG

c++ - 使用 cmake 在 Windows 上编译 C++ 数据库时出错

sockets - 空闲超时后 HTTP 代理上的 TCP 套接字断开连接

c# - 套接字监听器同时进行多个 AcceptAsync 调用

c# - 如何连接到 HTTPS 代理?

python - 如何重载 python 中的内置模块?

c++ - 什么会导致连接卡在 close_wait 状态

C编程局部字符指针

在 C 中调用外部函数

c - 我需要详细解释为什么指针指向 [2],因为我不明白,我认为它指向 [4]