尝试在Windows中使用C ++在Windows上进行一些基本的套接字编程,并且库文件出现问题

问题描述

所以我试图用C ++实现一个基本服务器,我在MinGW中使用代码块,当我去运行服务器时,我会遇到一系列错误

undefined reference to `__imp_socket'
undefined reference to `__imp_WSAStartup'
undefined reference to `__imp_bind'
undefined reference to `__imp_listen'
undefined reference to `__imp_accept'

等 基本上,以下代码中使用的所有联网功能 我认为问题在于链接,这正是#pragma注释(lib,“ ws2_32.lib”)应解决的问题。我也尝试使用g ++ main.cpp -lws2_32和g ++ main.cpp -o main -lws2_32进行编译,但无济于事。 99%的人认为问题不在于代码,但无论如何我还是在下面添加了它。希望有人有另一个建议

#include <iostream>
#include <ws2tcpip.h>
#include <winsock2.h>

#pragma comment (lib,"ws2_32.lib")

using namespace std;

int main()
{
    //initialize winsock
    WSADATA wsData;
    WORD ver = MAKEWORD(2,2);
    int wsOK = WSAStartup(ver,&wsData);
    if(wsOK != 0){
        cerr << "Can't initialize winsock" << endl;
        return -1;
    }

    // create a socket & bind to an ip and port
    SOCKET listening = socket(AF_INET,SOCK_STREAM,0);
    if(listening == INVALID_SOCKET){
        cerr << "Can't create a socket" << endl;
        return -1;
    }

    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(54000);
    hint.sin_addr.S_un.S_addr = INADDR_ANY;

    bind(listening,(sockaddr*)&hint,sizeof(hint));

    // Tell winsock to listen
    listen(listening,SOMAXCONN);

    // wait for connection
    sockaddr_in client;
    int clientsize = sizeof(client);

    SOCKET clientsocket = accept(listening,(sockaddr*)&client,&clientsize);

    //if (clientsocket == INVALID_SOCKET)

    char host[NI_MAXHOST]; //client remote name
    char service[NI_MAXHOST]; //service port client connects on
    ZeroMemory(host,NI_MAXHOST);
    ZeroMemory(service,NI_MAXHOST);

    if(getnameinfo((sockaddr*)&client,sizeof(client),host,NI_MAXHOST,service,NI_MAXSERV,0 ) == 0){
        cout << host << " connected on port " << service << endl;
    }
    /*
    else{
        inet_ntoa(AF_INET,&client.sin_addr,NI_MAXHOST);
        cout << host << " connected on port " << ntohs(client.sin_port) << endl;
    }
    */

    // closet listener
    //closesocket(listening);

    // while loop: accept and echo message back to client
    char buf[4096];
    while(true){
        ZeroMemory(buf,4096);
        //wait for data
        int bytesRecieved = recv(clientsocket,buf,4096,0);
        if (bytesRecieved == SOCKET_ERROR){
            cerr << "Error in recv" << endl;
            return -1;
        }

        if (bytesRecieved == 0){
            cout << "client disconnected" << endl;
            break;
        }
        //echo message back to client
        send(clientsocket,bytesRecieved+1,0);
    }

    // close socket
    closesocket(clientsocket);
    // shutdown winsock
    WSACleanup();
   
    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...