通过UDP通过Visual c++发送得到很多未解析的外部符号__imp__sendto@24

Sending over UDP by Visual C++ get lot of unresolved external symbol __imp__sendto@24

本文关键字:通过 符号 sendto@24 imp 外部 c++ Visual UDP      更新时间:2023-10-16

我安装了Visual Studio 2013 Ultimate。我尝试了这个代码通过UDP发送任何东西(它是第15或可能是后来的代码我尝试),我得到了一堆奇怪的错误。我在项目中缺少什么?

#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
    //init
    int server_length;
    int port = 123;
    const int STRLEN = 256;
    char recMessage[STRLEN];
    char sendMessage[STRLEN];
    char *sendMes = "SERVER READY";
    WSADATA wsaData;
    SOCKET mySocket;
    SOCKET myBackup;
    SOCKET acceptSocket;
    sockaddr_in myAddress;
    //create socket
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR)
    {
        cerr << "Socket Initialization: Error with WSAStartupn";
        system("pause");
        WSACleanup();
        exit(10);
    }
    mySocket = socket(AF_INET, SOCK_DGRAM, 0);
    if (mySocket == INVALID_SOCKET)
    {
        cerr << "Socket Initialization: Error creating socket" << endl;
        system("pause");
        WSACleanup();
        exit(11);
    }
    myBackup = mySocket;
    //bind
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr("0.0.0.0");
    myAddress.sin_port = htons(port);
    if (bind(mySocket, (SOCKADDR*)&myAddress, sizeof(myAddress)) == SOCKET_ERROR)
    {
        cerr << "ServerSocket: Failed to connectn";
        system("pause");
        WSACleanup();
        exit(14);
    }
    cout << endl;
    while (1)
    {
        server_length = sizeof(struct sockaddr_in);
        recvfrom(mySocket, recMessage, STRLEN, 0, (SOCKADDR*)&myAddress, &server_length);
        cout << recMessage << endl;
        sendto(mySocket, sendMes, strlen(sendMes), 0, (SOCKADDR*)&myAddress, server_length);
    }
    return 0;
}

Error   11  error LNK1120: 8 unresolved externals   c:usersrdocumentsvisual studio 2013ProjectsConsoleApplication17DebugConsoleApplication17.exe    1   1   ConsoleApplication17
Error   3   error LNK2019: unresolved external symbol __imp__bind@12 referenced in function _main   c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   4   error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _main   c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   5   error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function _main   c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   6   error LNK2019: unresolved external symbol __imp__recvfrom@24 referenced in function _main   c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   7   error LNK2019: unresolved external symbol __imp__sendto@24 referenced in function _main c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   8   error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _main c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   10  error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function _main  c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Error   9   error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function _main  c:UsersRdocumentsvisual studio 2013ProjectsConsoleApplication17ConsoleApplication17ConsoleApplication17.obj ConsoleApplication17
Warning 2   warning C4101: 'acceptSocket' : unreferenced local variable c:usersrdocumentsvisual studio 2013projectsconsoleapplication17consoleapplication17consoleapplication17.cpp 21  1   ConsoleApplication17
Warning 1   warning C4101: 'sendMessage' : unreferenced local variable  c:usersrdocumentsvisual studio 2013projectsconsoleapplication17consoleapplication17consoleapplication17.cpp 16  1   ConsoleApplication17

stdafx.h需要在其他任何内容之前包含,否则winsock2.h和iostream包含将被忽略。

stdafx.h是一个由Microsoft Visual Studio IDE向导生成的文件,它描述了标准系统和特定于项目的包含文件,这些文件经常使用,但很少更改。

兼容的编译器(例如Visual c++ 6.0及更新版本)将预编译此文件以减少总体编译时间。Visual c++不会编译源文件中#include "stdafx.h"之前的任何内容,除非编译选项/Yu'stdafx.h'未选中(默认情况下);它假设源代码中的所有代码(包括该行)都已编译。

(http://en.wikipedia.org/wiki/Precompiled_header)

编辑:您需要包含winsock的库Ws2_32。您可以通过添加#pragma comment(lib, "Ws2_32.lib")来实现。如果想让它在多个IDE上工作,可以在IDE中添加库。

(http://msdn.microsoft.com/en-us/library/windows/desktop/ms737629%28v=vs.85%29.aspx)