Я работаю над заданием, которое позволит серверу захватить содержимое текстового файла с помощью перенаправления ввода-вывода и построчно отправлять клиенту, который я затем вставлю в вектор. Я попытался использовать цикл while с обеих сторон, но он не работает. Он читает только первую строку файла (что я делал отдельно, чтобы сначала получить размер) и все. Может кто-нибудь, пожалуйста, посоветуйте мне, как решить эту проблему?
Вот мой код сервера:
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, (socklen_t *)&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);
std::getline(std::cin, getFile); // I/O Redirection
n = write(newsockfd,getFile.c_str(),18); //grabs first line of the file which is 3 and sends it to the client
while (std::getline(std::cin, getFile)) {
n = write(newsockfd, getFile.c_str(), 18); //supposed to write every line of the file to the client but isn't working? Should send 0 1 0 0 1 0 1 -1
if (n < 0){
error("ERROR writing to socket");
}
}
Код моего клиента:
std::vector<int> input;
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");
}
printf("The ring size is: ");
bzero(buffer,256);
n = read(sockfd,buffer,255); //received first line from server
size = std::atoi(buffer); //ring size converted from char* to int
while (read(sockfd, buffer, 255) > 0) {
input.push_back(std::atoi(buffer));
printf("Input contents: %s\n", buffer); //should print 0 1 0 0 1 0 1 -1
}
Мой текстовый файл:
3
0
1
0
0
1
0
1
-1