none
老师给的代码,结果运行出错了,关于socket RRS feed

  • 问题

  • #include<stdio.h>
    #include<WinSock2.h>
    void main()
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested=MAKEWORD(1,1);
    err= WSAStartup(wVersionRequested,&wsaData);
    if(err!=0)
    {
    return;
    }
    if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
    {
    WSACleanup();
    return;
    }
    SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    addrSrv.sin_family=AF_INET;
    addrSrv.sin_port=htons(6000);
    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
    listen(sockSrv,5);
    SOCKADDR_IN addrClient;
    int len=sizeof(SOCKADDR);
    while(1)
    {
    SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
    char sendBuf[100];
    sprintf(sendBuf,"test %s",inet_ntoa(addrClient.sin_addr));
    send(sockConn,sendBuf,strlen(sendBuf)+1,0);
    char recvBuf[100]={0};
    recv(sockConn,recvBuf,100,0);
    printf("%s\n",recvBuf);
    while(1)
    {
    recv(sockConn,recvBuf,100,0);
    printf("%s\n",recvBuf);
    memset(sendBuf,0,sizeof(sendBuf));
    strcat(sendBuf,"echo ");
    strcat(sendBuf,recvBuf);
    send(sockConn,sendBuf,strlen(sendBuf)+1,0);
    if(strcmp(recvBuf,"end")==0)
    {
    break;
    }
    }
    closesocket(sockConn);
    }
    }

    1>c:\users\xu\documents\visual studio 2010\projects\socket\socket\sockectsrv.cpp(32): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>          f:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(371) : 参见“sprintf”的声明
    1>c:\users\xu\documents\visual studio 2010\projects\socket\socket\sockectsrv.cpp(42): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>          f:\program files (x86)\microsoft visual studio 10.0\vc\include\string.h(110) : 参见“strcat”的声明
    1>c:\users\xu\documents\visual studio 2010\projects\socket\socket\sockectsrv.cpp(43): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>          f:\program files (x86)\microsoft visual studio 10.0\vc\include\string.h(110) : 参见“strcat”的声明
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__send@16,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__inet_ntoa@4,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__accept@12,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__listen@8,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__bind@12,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__htonl@4,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__WSACleanup@0,该符号在函数 _main 中被引用
    1>sockectsrv.obj : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 _main 中被引用
    1>c:\users\xu\documents\visual studio 2010\Projects\socket\Debug\socket.exe : fatal error LNK1120: 12 个无法解析的外部命令

    我当场吓出shi了


    • 已移动 ChiYau 2012年4月14日 7:32 這個問題和C++有關..發在C++ Forum比較合適 (发件人:Visual Studio 2010)
    • 已编辑 Legion Commander Duel 2012年4月14日 7:42 修改
    2012年4月14日 7:24

答案

  • #pragma comment(lib, "WS2_32.lib")

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年4月18日 7:55
    • 已标记为答案 Helen Zhao 2012年4月23日 2:14
    2012年4月15日 3:26
    版主
  • 金刚不坏你好!

    我同意VisualEleven的观点,你应该添加依赖项Ws2_32.lib 。 你可以这样添加: #pragma comment(lib, "WS2_32.lib")。 也可以参考下面的方法:

    1-]打开项目属性Configuration Properties->Linker->Input->"Additional Dependencies",在这里添加 Ws2_32.lib。

    2-] 打开项目属性Configuration Properties->Linker->General->"Additional Library Directories",在这里添加Ws2_32.lib文件的路径。

    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已建议为答案 Helen Zhao 2012年4月18日 7:55
    • 已标记为答案 Helen Zhao 2012年4月23日 2:14
    2012年4月16日 4:39

全部回复

  • #pragma comment(lib, "WS2_32.lib")

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年4月18日 7:55
    • 已标记为答案 Helen Zhao 2012年4月23日 2:14
    2012年4月15日 3:26
    版主
  • 金刚不坏你好!

    我同意VisualEleven的观点,你应该添加依赖项Ws2_32.lib 。 你可以这样添加: #pragma comment(lib, "WS2_32.lib")。 也可以参考下面的方法:

    1-]打开项目属性Configuration Properties->Linker->Input->"Additional Dependencies",在这里添加 Ws2_32.lib。

    2-] 打开项目属性Configuration Properties->Linker->General->"Additional Library Directories",在这里添加Ws2_32.lib文件的路径。

    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已建议为答案 Helen Zhao 2012年4月18日 7:55
    • 已标记为答案 Helen Zhao 2012年4月23日 2:14
    2012年4月16日 4:39