回 帖 发 新 帖 刷新版面

主题:[原创]socket transmitfile函数传文件问题

我的发送端是这样写的:
SOCKET  hSocket;
hSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(hSocket==INVALID_SOCKET)//如果创建失败,则返回错误消息   
{   
    printf("socket()   failed:   %d\n",   WSAGetLastError());   
    return   1;   
}
if(connect(hSocket, (struct sockaddr *)&server , sizeof(server))==SOCKET_ERROR)//与主机建立连接   
{   
    printf("connect()   failed:   %d\n",   WSAGetLastError());   
            return   1;   
}      
FILE *fp;
fp=fopen("1","r");
TransmitFile(hSocket,fp,0,0,0,NULL,TF_DISCONNECT );    
fclose(fp);
closesocket(hSocket);//关闭这个套接字
接受端代码:
char   sz[1000000];   
while(true)   
{   
int ret=recv(sClient,sz,strlen(sz),0);
if(ret==SOCKET_ERROR   )   
break; 
sz[ret]='\0';
printf("%s\n",sz);break;
//写入文件   
}   

问题 1:TransmitFile能把文件发出去吗?发的是文件里面的内容,还是发的整个文件数据?
     2.接手端接受到的是字符串吧?怎么把字符串还原为发送端发送的文件呢?也就是怎么写文件呢?

回复列表 (共2个回复)

沙发

问题 1:TransmitFile实现代码你没有贴出来,发送文件 用send(...),TransmitFile中一定有一个send(hSocket...),发送的肯定是文件字节流,接受端需要创建一个同样名称的文件,然后把流写入文件,这样就实现了文件的传输
2.接受的不是字符串

板凳


[code=c]
    CFile file;
    if(!file.Open(strPathName, CFile::modeRead | CFile::typeBinary))
    {
        AfxMessageBox("打开文件失败");
        return -1;
    }
    char temp[2048];                         
    memset(temp,0,sizeof(temp)); 
    ltoa(lFileSize, temp, 10);  
    int  iEnd =0;
    int  ilen =0;
    long iTmp =0;
    while (1)
    {
        ilen = file.Read(temp, 2048);
        if (ilen==0)
        {
            break;
        }
        iEnd = send(pDlg->m_hSocket,temp,ilen,0);
        if (iEnd==SOCKET_ERROR)
        {
            strError.Format("Send File:%d",error=WSAGetLastError());
            AfxMessageBox(strError);
            break;
        }
        iTmp +=iEnd;
        pDlg->m_progress.SetPos(iTmp);
    
    }
    file.Close();
[/code]

贴一段写过的代码,你参考一下,是发生一个图片文件的!

我来回复

您尚未登录,请登录后再回复。点此登录或注册