我设置了一个简单的客户端和服务器程序,使用 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()
(or send()
, sendto()
or sendmsg()
) 是否成功地将消息传递到服务器?