我想在客户端和服务器之间进行文件传输,客户端向服务器端传输没有问题,但从服务器向客户端传输就出问题了。客户端开始是用for循环send,而服务器则用一个线程接收。当服务器接收完之后对文件进行某些处理再传回客户端,这时就出问题了。当客户端发完数据之后就用receive等待。请哪位高手指点一下,不按照我开始说的也行,反正是实现这个功能:客户端传文件给服务器,服务器对该文件做了处理之后再把该文件传回客户端,而且能够允许多个客户端同时进行。谢谢!

解决方案 »

  1.   

    客户端主要代码如下:
    pf = fopen("sendfile.txt", "rb");
    while(1)  // send file
    {
      fread(buffer, 1, 1024, pf);
      ret = send(server, buffer, strlen(buffer), 0);
      if(ret == 0)
        break;
    }
    fclose(pf);pf = fopen("receivefile.txt", "wb");
    while(1)  // receive file
    {
      ret = recv(server, buffer, 1024, 0); // 这个地方收不到数据
      if(ret == 0)
        break;
      fwrite(buffer, 1, ret, pf);
    }
    fclose(pf);服务器的线程主要代码如下:
    while(1)
    {
      ret = recv(client, buffer, 1024, 0);
      if(ret == 0)
        break;
      fwrite(buffer, 1, ret, pf);
      fclose(pf);
      ...... // 对接收后的文件进行处理之后再发给客户端,但这个时候好象不运行下面的代码了。
      pf = fopen("temp.txt", "rb");
      while(1)
      {
        fread(buffer, 1, 1023, pf);
        ret = send(client, buffer, strlen(buffer), 0);
        if(ret == 0)
          break;
      }
    }
    客户端或是服务器端不知道哪个地方不对。
      

  2.   

    传文件数据别用strlen函数,strlen是取字符串长度,遇到\0就认为字符串结束了。发送数据的长度用fread的返回值来计算。
      

  3.   

     ret = send(client, buffer, strlen(buffer), 0); 
    我说的是这行。你是怎么写的?