gpt4 book ai didi

c++ - 当我没有 endl c++ 时 ofstream 不输出

转载 作者:行者123 更新时间:2023-11-30 05:42:24 25 4
gpt4 key购买 nike

我有一个客户端/服务器套接字程序,它在 char[2048] 中写入文件数据包,我已经 100% 确保在通过套接字发送之前以 null 终止所有数组。

但是在服务器端,如果我没有 endl,我无法让 ofstream 输出到文件,但是这个 endl 将自己插入到数据包的末尾,并使文件在我没有的地方有换行符'希望他们这样做。

下面是相关代码

客户

void Copy(char *filename1,string filename2,int Sockfd) {

const int BUFSIZE=2048;
char buffer[BUFSIZE];
ifstream fin;


long filelen, bytesRemaining, bytes;

// Open the file to be transferred, check it exists.
fin.open( filename1);
if (!fin.good()) {
cerr << "Problems opening \"" << filename1 << "\" (" << errno << "): " << strerror(errno) << endl;
exit(1);
}

// Determine the file's length.
fin.seekg(0,ios::end);
if(fin.fail()) cerr<<"seekg() fail!\n";
filelen = fin.tellg();
if(fin.fail()) cerr<<"tellg() fail!\n";
fin.seekg(0, ios::beg);
if(fin.fail()) cerr<<"seekg() fail!\n";


// Copy the file data.
bytesRemaining = filelen;
while (bytesRemaining > 0)
{
bytes = bytesRemaining > BUFSIZE ? BUFSIZE : bytesRemaining;

buffer[bytes] = '\0';




fin.read(buffer,bytes);
if(fin.fail())
{
cerr<<"read() errror\n";
exit(1);
}


send(Sockfd,buffer,sizeof buffer,0);


recv(Sockfd,buffer,strlen(buffer),0);

bytesRemaining -= bytes;
}
fin.close();

}

和服务器

    int retval;
char EchoBuffer[RCVBUFSIZE]; // Buffer for echo string
int RecvMsgSize; // Size of received message





std::ofstream fout;

fout.open("test.txt",std::ios::ate);




// Send received string and receive again until end of transmission
while(RecvMsgSize > 0)
{ // zero indicates end of transmission

// Echo message back to client
if(send(ClntSocket, EchoBuffer, RecvMsgSize, 0) != RecvMsgSize){
perror("send() failed"); exit(1);
}
// See if there is more data to receive



if((RecvMsgSize = recv(ClntSocket, EchoBuffer, RCVBUFSIZE-1, 0)) < 0){
perror("recv() failed"); exit(1);
}


EchoBuffer[RecvMsgSize] = '\0';
fout << EchoBuffer << endl; //If I don't have this endl, it won't work at all




}

fout.close();
close(ClntSocket); // Close client socket
}

最佳答案

你应该写fout.flush();fout << EchoBuffer; 之后.

关于c++ - 当我没有 endl c++ 时 ofstream 不输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30682048/

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