Существует простая программа клиент-сервер.
- Сервер запущен $. / Сервер 5000
- Клиент также подключен к серверу .. $. / Client 127.0.0.1 5000
- Клиент вводит строку
- Клиент имеет сообщение «Я получил ваше сообщение», отображаемое на его терминале, а сервер отображает введенную строку клиентом
Проблема в том, что когда я запускаю клиент, выполняя $. / Client 127.0.0.1 5000. Я получаю это в терминале на стороне сервера.
Before Listen
After Listen
Before accept
After accept
Before read
Тогда только тогда, когда я ввожу сообщение на экране клиента и затем нажимаю ввод. Я получаю это отображается ..
Here is the message: This is a message
Почему , когда код входит в wait
состояние перед вызовом read ()
просто ничего не читайте и возвращайте 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");