我正在编写一个文件传输客户端/服务器应用程序,其中客户端在 windows7 上运行并用 vb.net 编写,服务器在 linux mint 上运行并用 c++ 编写(我使用的是 vmware)我的问题是当我尝试将文件上传到服务器(例如图像)接收到的数据缺少许多字节,这些字节也代表控制字符(例如 EOT、ETB、...),我猜它们被读取为 tcp 控制字符并被接收方忽略操作系统。我已经用简单的文本文件(最大 4MB)测试了应用程序,没有任何问题。有没有办法防止系统忽略这些字节?
这是接收文件的 c++ 函数:
string readSockBytes(int port,int num,int size)
{
int dcmbuffSize = 1460;
int n;
stringstream temp;
string strBuffer,Sbuffer;
char Rbuffer[dcmbuffSize];
struct socketVar sockets;
sockets = setSocket(port);
sockets = sockListen(sockets);
cout<<"user connected\n";
strBuffer = readsock(sockets);
cout<<strBuffer.substr(0,strBuffer.find("$"))<<endl;
if(num == atoi(strBuffer.substr(0,strBuffer.find("$")).c_str()))
Sbuffer = "ready$";
else
{
Sbuffer = "exit$";
close(sockets.newsockfd);
close(sockets.sockfd);
}
n = writesock(sockets, Sbuffer, 100);
if (n < 0) error("ERROR writing to socket");
while(strBuffer.length() < fileSize)
{
n = read(sockets.newsockfd,Rbuffer,dcmbuffSize-1);
if (n < 0) error("ERROR reading from socket");
temp.str(Rbuffer);
strBuffer = strBuffer+temp.str();
}
strBuffer = strBuffer.substr(0,size);
return strBuffer;
}