有一个简单的客户端 - 服务器程序。无法理解read()系统调用
- 服务器启动$。/服务器5000
- 客户端也被连接到服务器.. $。/客户端127.0.0.1 5000
- 客户端进入一个字符串
- 客户端有消息“我有你的消息”,他的终端上显示&服务器客户端显示输入的字符串
的问题是,当我做$运行客户端。/客户127.0.0.1 5000我在服务器端得到这个终奌站。
Before Listen
After Listen
Before accept
After accept
Before read
然后只有当我在客户端屏幕上输入消息,然后按回车。我得到这个显示..
Here is the message: This is a message
为什么是代码进入等待 状态之前阅读()调用..不如果它 刚读什么,并返回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");
我们输入了几乎相同的答案:) +1 – 2010-04-02 13:49:40
ohk。我不知道这个.. Thanx .. – 2010-04-02 13:57:13