【发布时间】:2014-10-09 04:20:22
【问题描述】:
服务器.c
bytesReceived = 0;
char buff[256];
char* buffFile;
char tempbuff;
bytesReceived = read(clnt_fd, &tempbuff, 1);
buffFile = (char*)malloc(sizeof(char));
buffFile[0]=tempbuff;
long incr=1;
while(bytesReceived > 0 )
{
bytesReceived = read(clnt_fd, &tempbuff, 1);
incr++;
buffFile = (char*)realloc(buffFile, sizeof(char)*incr);
buffFile[incr-1]=tempbuff;
}
client.c
char filebuff[20];
strcpy(filebuff, "UPC ");
strcat(filebuff, file_size); //it's the file size
strcat(filebuff, " ");
write(clnt_fd, filebuff, strlen(filebuff));
while(1)
{
int nread = fread(file_bytes,1,256,fp);
bytesSent = write(clnt_fd, file_bytes, nread);
if(bytesSent<0)
{
printf( "Error: %s\n", strerror( errno ) );
break;
}
if(nread<256)
{
char t='\n';
bytesSent = write(clnt_fd, &t, 1);
break;
}
}
所以基本上,客户端会发送这样的消息,我必须将'\n'作为最后一个字节。
UPC 5624 bytesbytesbytesetcetc\n
并且服务器将接收我放入数组中的那些字节,以便对其进行标记并从数组中获取这些字节以将其写入文件中。问题是,我做了一个计数器,我看到客户端发送了多少字节,每次循环结束时收到多少字节,我检查了最后一个字节,我的服务器阻塞读取功能并挂在那里。有什么想法吗?
【问题讨论】:
-
我不明白这个问题。你一直在读,所以最终它会阻塞,直到更多的数据到达、发生错误或 EOS,这永远不会发生,因为对等方没有关闭他的结束。为什么你一次读一个字节?执行一次读取,进入一个足够大的缓冲区以容纳您所期望的内容,如果您没有得到全部内容,则循环。
-
我不知道会有多少数据到达。我正在接收文件,它们的大小可能很大。