套接字编程:因为重载WSAStart而出错

时间:2014-03-11 16:51:28

标签: c sockets winsock

我编写了一个程序,它通过套接字向谷歌发送HTTP请求以读取响应。 这非常有效,但是由于我重载了它,我得到了这些编译错误:

错误1

error LNK2005: _initializeWinsock already defined in
Main.obj    workshop\SocketTest\WSAStart.obj    SocketTest

错误2

error LNK1169: one or more multiply defined symbols
found   workshop\Debug\SocketTest.exe   1   1   SocketTest

你有线索吗?

MAIN.C:

#include<stdio.h>
#include "WSAStart.c"


int main(int argc, char *argv[])
{
initializeWinsock();

    printf("Initialised.\n");
    return 0;
}

WSAStart.c:

#include <winsock2.h>
#include <stdio.h>

#pragma comment(lib,"ws2_32.lib") //Winsock Library

WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
char *message, server_reply[2000];
int recv_size;

int initializeWinsock() {
    printf("\nInitialising Winsock...");
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        printf("Failed. Error Code : %d", WSAGetLastError());
        return 1;
    }

    printf("Initialised.\n");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您不应该#include其他源文件中的源文件。特别是如果包含的源文件也用于通过单独的目标文件构建应用程序。

而是使用所需的声明制作标题文件:

WSAStart.h文件类似:

#pragma once

int initializeWinsock();

包含上述标题文件Main.c,您可以照常调用该函数。