LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 915|回复: 1

我想写一个基于socket进行阻塞方式传文件的程序,谁能写?

[复制链接]
发表于 2004-3-26 17:08:39 | 显示全部楼层 |阅读模式
我写的是服务端程序,等待client的联接,建立socket,获取了客户端传来的文件名和目标地址.
然后以tcp stream方式接收文件.前面都可以了,就是不会些传文件数据部分了.(程序如下)

谢谢!!!!!
[php]
int server_fd,client_fd,len,rlen,k;
    struct sockaddr_in addr;
    char filename[80],destpath[80];
    char *msg="ok\r\n";
   
    server_fd=Init_Tcp_Server_2(1333);
   
    if(server_fd<0){
      printf("Init Server Error.\n");
      return -1;
    }
   
    client_fd=Tcp_Server_Wait_Client(server_fd,&addr,-1,-1);
   
    if(client_fd<0){
      printf("Wait Client Error .\n");
      return -2;
    }
    printf("Get Client Fd OK.\n");
   
   
    while(1)
    {
      memset(filename,0,80);
      if((k=recv(client_fd,filename,80,0))==-1)
      {
        perror("recv\n");
        exit(1);
      }
      filename[k-2]='\0';
      len=strlen(msg);
      if (filename=="")
        return -3;
      else
        rlen=send(client_fd,msg,len,0);
      while(rlen<strlen(msg))
        rlen=send(client_fd,msg,len,0);
       
      memset(destpath,0,80);
      if((k=recv(client_fd,destpath,80,0))==-1)
      {
        perror("recv\n");
        exit(1);
      }
      destpath[k-2]='\0';
      
      //read_tcp(client_fd,filename,80);
      len=strlen(msg);
      if (filename=="")
        return -3;
      else
        rlen=send(client_fd,msg,len,0);
      while (rlen<strlen(msg))
        rlen=send(client_fd,msg,len,0);
      
      k=Recv_Tcp_File(client_fd,filename,destpath,5,0); //这个函数怎么写???????????????????????????????????????????????????????????????????
      
      if(k==1){
        printf("Transfer Finished \n");
        return 0;
      }
      if(k<0){
        printf("Transfer %s Error .\n",filename);
        return -1;
      }
      printf("Transfer One File OK .\n");
    }
[/php]
:help
发表于 2004-3-26 19:31:18 | 显示全部楼层
socket套接字会自己使用阻塞功能,传递数据的方式与其它读写文件的方式一样,用open打开要传递的文件,读入缓冲,再write到套接字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表