我正在使用我编写的用于处理数据库输入的 tcp 服务器。我有一个位于服务器上的 tcp 客户端,它将文件名发送到位于不同 linux 服务器上的 tcp 服务器。一旦接收到文件名,linux服务器就会进入一个共享文件夹并拉取文件,然后将其插入数据库。
我的问题是正确声明缓冲区并清除它以确保我得到正确的文件名,而没有添加任何乱码或从中删除任何内容。
现在它的工作方式是这样的:
char data[1024];
这很好,但它不会自动完全删除缓冲区,所以我尝试将内存隐式分配给“数据”,例如:
char *data = (char*) malloc(1024 * sizeof(char));
...
free(data);
或者
char *data = new char[1024];
...
delete[] data;
出于某种原因,上述两个声明声明了一个大小为 = 8 的缓冲区,我使用了这个
sizeof(data);
我收到的也只有 8 个字符长。我不确定它为什么会这样做,有什么帮助吗?
编辑
char *data = (char*)malloc(1048 * sizeof(char));
if(data==NULL) exit(1);
cout << "DATA Size: " << sizeof(data) << "\n";
int msglen = read(conn, data, sizeof(data));
cout << "Server got " << msglen << " byte message: " << data << "\n";
if(write(conn, &msglen, sizeof(msglen))<0){
cout << "Failed to write back to the client " << strerror(errno);
}
free(data);
close(conn);