gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:33 25 4
gpt4 key购买 nike

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

服务端代码:

 listen(sockfd,5);

clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,256);

n = read(newsockfd,buffer,255);

if (n < 0)
error("ERROR reading from socket");

printf("Here is the message: %s\n",buffer);

n = write(newsockfd,"I got your message",18);

if (n < 0)
error("ERROR writing to socket");

客户端代码:

if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
else
printf("sucess. n = %d", n);

bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");

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

所以我的问题是:有没有办法知道 write()(或 send()sendto()sendmsg()) 是否成功将消息发送到服务器?

最佳答案

没有。写或发送只是说话,他们不等待反馈(例如 TCP 的 ACK)。但是,如果您得到某种反馈,您只能确定消息已成功传递。尝试另一个发送甚至没有帮助,因为它可能在前一个消息尚未到达客户端时执行。它也无助于接收并希望出错,因为您收到的数据可能在您发送消息之前就已由对等方发送。真正确定的唯一方法是在您的应用程序协议(protocol)中放置某种显式握手并等待对您的消息的匹配响应。

关于c - 如何知道 send() 或 sendmsg() 成功发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com