2991|9

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教高手一个文件传输问题,高手请指点啊! [复制链接]

在VC里借鉴了个网友做的服务器和客户端程序,想把客户端移植到EVC下面,出现了编译错误,请高手指点怎么改??
vc下的客户端程序部分代码是:
[code]
DWORD WINAPI CClientDlg::SocketSend(LPVOID lpParameter)
{
       
        HWND hwnd = ((socksend*)lpParameter)->hwnd;
        CString sendfname = ((socksend*)lpParameter)->sendfname;
        DWORD dwip = ((socksend*)lpParameter)->dwip;
       
        SOCKET socketsend = socket(AF_INET,SOCK_STREAM,0);

        SOCKADDR_IN addSrv;
        addSrv.sin_addr.S_un.S_addr = htonl(dwip);
        addSrv.sin_family = AF_INET;
        addSrv.sin_port   = htons(8848);


        if ((connect(socketsend,(SOCKADDR*)&addSrv,sizeof(SOCKADDR))) == SOCKET_ERROR)  //连接
        {
                closesocket(socketsend);
               
                PrintSystemMsg("连接服务器失败!");

                return FALSE;
        }
        PrintSystemMsg("连接服务器成功!");

        //声明文件发送本地变量
        SOCKET_STREAM_FILE_INFO        StreamFileInfo;
        WIN32_FIND_DATA  FindFileData;
        BOOL bRET = true;
        BYTE * sendData = NULL;
        CFile sendFile;
        CFileException fe;
        BOOL bFileISopen = FALSE;
        UINT dwRead = 0;

        //打开文件
        if(!(bFileISopen = sendFile.Open(sendfname,CFile::modeRead | CFile::typeBinary,&fe)))
        {
                PrintSystemMsg("文件打开失败!请重试!");
                goto free;
        }

        FindClose(FindFirstFile(sendfname,&FindFileData));
        memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));
        strcpy(StreamFileInfo.szFileTitle,sendFile.GetFileTitle());
       
        StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes;
        StreamFileInfo.ftCreationTime   = FindFileData.ftCreationTime;
        StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;
        StreamFileInfo.ftLastWriteTime  = FindFileData.ftLastWriteTime;
        StreamFileInfo.nFileSizeHigh    = FindFileData.nFileSizeHigh;
        StreamFileInfo.nFileSizeLow     = FindFileData.nFileSizeLow;
       
        PrintSystemMsg("开始发送文件.......");

        if(send(socketsend,(const char*)&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO),0) == SOCKET_ERROR)
        {
               
                PrintSystemMsg("文件信息传送失败!请重试");
                goto free;
        }
        //发送文件
       
        while (dwRead         {
                byte * data = new byte[1024];
                UINT dw = sendFile.Read(data,1024);
                if ((send(socketsend,(const char*)data,1024,0)) == SOCKET_ERROR)
                {
                        PrintSystemMsg("文件传输错误!可能网络断开!");
                        //closesocket(socketsend);
                        goto free;
                }
                dwRead+=dw;
                delete[] data;
        }
       
        PrintSystemMsg("文件发送完毕");
        AfxMessageBox("发送成功!");       

free:

        delete[] sendData;
        if (bFileISopen)
        {
                sendFile.Close();
        }
        closesocket(socketsend);
        WSACleanup();      
        return bRET;
}

移植到EVC下的代码是:
[code]
DWORD WINAPI CFileTranDlg::SocketSend(LPVOID lpParameter)
{
       
        HWND hwnd = ((socksend*)lpParameter)->hwnd;
        CString sendfname = ((socksend*)lpParameter)->sendfname;
        DWORD dwip = ((socksend*)lpParameter)->dwip;
       
        SOCKET socketsend = socket(AF_INET,SOCK_STREAM,0);
       
        SOCKADDR_IN addSrv;
        addSrv.sin_addr.S_un.S_addr = htonl(dwip);
        addSrv.sin_family = AF_INET;
        addSrv.sin_port   = htons(6000);
       
       
        if ((connect(socketsend,(SOCKADDR*)&addSrv,sizeof(SOCKADDR))) == SOCKET_ERROR)  //连接
        {
                closesocket(socketsend);
               
                PrintSystemMsg(_T("Connect Serve Fail!"));
               
                return FALSE;
        }
        PrintSystemMsg(_T("Connect Serve Successful!"));
       
        //声明文件发送本地变量
        SOCKET_STREAM_FILE_INFO        StreamFileInfo;
        WIN32_FIND_DATA FindFileData;
        BOOL bRET = true;
        BYTE * sendData = NULL;
        CFile sendFile;
        CFileException fe;
        BOOL bFileISopen = FALSE;
        UINT dwRead = 0;
       
        //打开文件
        if(!(bFileISopen = sendFile.Open(sendfname,CFile::modeRead | CFile::typeBinary,&fe)))
        {
                PrintSystemMsg(_T("Open File Fail!Please again!"));
                goto free;
        }
       
        FindClose(FindFirstFile(sendfname,&FindFileData));
        memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO));
//         CString str = sendFile.GetFileTitle();
//         CString temp = _T("");
//         temp.Format(_T("%s"),str);
//         wcscpy(StreamFileInfo.szFileTitle,temp);//修改!!!!
        StreamFileInfo.szFileTitle = sendFile.GetFileTitle();

        StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes;
        StreamFileInfo.ftCreationTime   = FindFileData.ftCreationTime;
        StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime;
        StreamFileInfo.ftLastWriteTime  = FindFileData.ftLastWriteTime;
        StreamFileInfo.nFileSizeHigh    = FindFileData.nFileSizeHigh;
        StreamFileInfo.nFileSizeLow     = FindFileData.nFileSizeLow;
       
        PrintSystemMsg(_T("Start Senf File...."));
       
        if(send(socketsend,(const char*)&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO),0) == SOCKET_ERROR)
        {
               
                PrintSystemMsg(_T("File Infor Tran Fail!Please again"));
                goto free;
        }
        //发送文件
       
        while (dwRead         {
                byte * data = new byte[1024];
                UINT dw = sendFile.Read(data,1024);
                if ((send(socketsend,(const char*)data,1024,0)) == SOCKET_ERROR)
                {
                        PrintSystemMsg(_T("File Tran Error!Maybe net disconnect!"));
                        //closesocket(socketsend);
                        goto free;
                }
                dwRead+=dw;
                delete[] data;
        }
       
        PrintSystemMsg(_T("File Send Successful!"));
        AfxMessageBox(_T("Send Successful!"));       
       
free:
       
        delete[] sendData;
        if (bFileISopen)
        {
                sendFile.Close();
        }
        closesocket(socketsend);
        WSACleanup();      
        return bRET;
}

出现了如下编译错误:
Deleting intermediate files and output files for project 'FileTran - Win32 (WCE emulator) Debug'.
--------------------Configuration: FileTran - Win32 (WCE emulator) Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
FileTran.cpp
FileTranDlg.cpp
Generating Code...
Linking...
FileTranDlg.obj : error LNK2019: unresolved external symbol _inet_addr referenced in function "protected: void __thiscall CFileTranDlg::OnSend(void)" (?OnSend@CFileTranDlg@@IAEXXZ)
FileTranDlg.obj : error LNK2019: unresolved external symbol _WSACleanup referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
FileTranDlg.obj : error LNK2019: unresolved external symbol _send referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
FileTranDlg.obj : error LNK2019: unresolved external symbol _closesocket referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
FileTranDlg.obj : error LNK2019: unresolved external symbol _connect referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
FileTranDlg.obj : error LNK2019: unresolved external symbol _htons referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
FileTranDlg.obj : error LNK2019: unresolved external symbol _htonl referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
FileTranDlg.obj : error LNK2019: unresolved external symbol _socket referenced in function "public: static unsigned long __cdecl CFileTranDlg::SocketSend(void *)" (?SocketSend@CFileTranDlg@@SAKPAX@Z)
emulatorDbg/FileTran.exe : fatal error LNK1120: 8 unresolved externals
Error executing link.exe.
Creating browse info file...

FileTran.exe - 9 error(s), 0 warning(s)

最新回复

谢谢!学习了!  详情 回复 发表于 2008-5-14 11:26
点赞 关注

回复
举报

81

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有包含相应的库文件。
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
首先VC到EVC,是需要移植的,不是拿过来就可以用的。

其次,CE是支持SOCKET的,估计是LZ所用的平台不支持SOCKET。

最后对LZ说:你先要自己解决问题,否则不会有进步的。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
我用的平台是就是EVC啊,怎么说我的平台不支持SOCKET呢?
代码我改后才发上来的,一开始不是这样的代码
只是是在解决不出来才来这里发帖的
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
windows下用socket是包含库Ws2_32.lib,wince下是包含Ws2.lib,两个库名字不一样,是否没改?
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

6
 
EVC是平台吗?它只是开发工具。

LZ用的是什么SDK呢?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
STANDARDSDK 500
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
加入对Ws2.lib的连接在
setting中
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢楼上的大哥
编译通过了~~~
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢!学习了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表