我正在尝试重用已连接的套接字 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/