gpt4 book ai didi

c - 无法理解 read() 系统调用

转载 作者:行者123 更新时间:2023-11-30 18:32:58 25 4
gpt4 key购买 nike

有一个简单的客户端-服务器程序。

  • 服务器已启动 $./server 5000
  • 客户端也连接到服务器.. $./client 127.0.0.1 5000
  • 客户端输入一个字符串
  • 客户端的终端上显示消息“我收到您的消息”,服务器显示客户端输入的字符串

问题是,当我通过执行 $./client 127.0.0.1 5000 运行客户端时。我在服务器端终端中得到了这个。

Before Listen 
After Listen
Before accept
After accept
Before read

然后仅当我在客户端屏幕上输入消息然后按 Enter 时。我得到这个显示..

Here is the message: This is a message

Why is that the code goes into wait state before read() call.. Shouldnt it just read nothing and return 0..

我在概念上有些地方是错误的。请帮助我..

客户端相关代码:-

if (connect(sockfd,&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");
bzero(buffer,256);
n = read(sockfd,buffer,255);
printf("%d\n",n);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

相关服务器代码:-

if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
printf("Before Listen ");
listen(sockfd,5);
printf("After Listen ");
clilen = sizeof(cli_addr);
printf("Before accept ");
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
printf("After accept");
if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,256);
printf("Before read");
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");

最佳答案

默认情况下,套接字被创建为阻塞套接字,并且读取调用将阻塞(等待)直到有数据要读取。

关于c - 无法理解 read() 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2566929/

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