C++ POP3服务器-原始C++;

C++ POP3服务器-原始C++;,c++,pop3,C++,Pop3,我已经花了至少2个小时来寻找一种方法,可以简单地连接到POP3服务器,并获取等待它的邮件数。由于C语言中的儿童容易,而且在Linux上的C++基础似乎很简单,所以我无法找到关于如何在Windows上工作的最简单的教程。 我不想使用任何第三方库——我只想用一个简单的C++代码编写一个简单的控制台程序,只需要做一些基本的东西,如上所述。我试图研究的所有资料来源如下: POP3是一种与电子邮件有关的协议,非常简单。现在,让我们继续编写一个多平台POP3服务器客户端应用程序,使用F16战斗机并发明一个正

我已经花了至少2个小时来寻找一种方法,可以简单地连接到POP3服务器,并获取等待它的邮件数。由于C语言中的儿童容易,而且在Linux上的C++基础似乎很简单,所以我无法找到关于如何在Windows上工作的最简单的教程。 <>我不想使用任何第三方库——我只想用一个简单的C++代码编写一个简单的控制台程序,只需要做一些基本的东西,如上所述。我试图研究的所有资料来源如下:

POP3是一种与电子邮件有关的协议,非常简单。现在,让我们继续编写一个多平台POP3服务器客户端应用程序,使用F16战斗机并发明一个正在进行的时间机器

我似乎找不到任何简单的解决办法

我已经写了(在一些帮助下)一个简单的代码片段,应该可以在linux上工作——至少根据教程;我现在没有办法检查。 HoVEWER,C++不是我的“母语”,当我尝试把它转换到Windows时,我只是从一个洞掉进另一个洞,不得不花费另一刻钟GGOGOLE解决这个问题。 此时,代码正在编译,但链接器失败。这很奇怪,因为我已经将
ws2_32.lib
添加到链接器中,所以它应该可以正常工作。作为回报,我只得到
LNK2019
的加载

你能帮我写代码或者提供一个简单的Windows解决方案的链接吗

守则:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN 1
    #include <winsock2.h>
    #include <windows.h>
#else

#endif
#ifndef in_addr_t
    #define in_addr_t long
#endif
#include <string.h>

void err(char *where) {
    fprintf(stderr, "error in %s: %d\n", where, errno);
    exit(1);
}

int main(int argc, char *argv[]) {
    char *remote = "some_address";
    struct servent *sent;
    struct protoent *pent;
    int port;
    int sock;
    int result;
    in_addr_t ipadr;
    struct sockaddr_in addr;
    struct hostent *hent;
    char buf[2048];
    sent = getservbyname("http", "pop3");
    if(sent == NULL)
    err("getservbyname");
    port = sent->s_port;
    pent = getprotobyname("pop3");
    if(pent == NULL)
    err("getprotobyname");
    hent = gethostbyname(remote);
    printf("Host: %s\n", hent->h_name);
    printf("IP: %s\n", inet_ntoa(*((struct in_addr *)hent->h_addr)));
    addr.sin_family = AF_INET;
    addr.sin_port = port;
    addr.sin_addr = *((struct in_addr *)hent->h_addr);
    memset(addr.sin_zero, '\0', 8);
    sock = socket(AF_INET, SOCK_STREAM, pent->p_proto);
    if(sock < 0)
    err("socket");
    result = connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr));
    if(result < 0)
    err("connect");
}
#包括
#包括
#包括
#ifdef_WIN32
#定义WIN32_精益_,_表示1
#包括
#包括
#否则
#恩迪夫
#ifndef输入地址
#定义地址长度
#恩迪夫
#包括
无效错误(字符*其中){
fprintf(标准,“%s中的错误:%d\n”,其中,errno);
出口(1);
}
int main(int argc,char*argv[]){
char*remote=“some_address”;
结构服务器*已发送;
结构质子*pent;
国际港口;
int袜子;
int结果;
in_addr_t ipadr;
地址中的结构sockaddr\u;
结构hostent*hent;
char-buf[2048];
sent=getservbyname(“http”,“pop3”);
if(sent==NULL)
错误(“getservbyname”);
端口=已发送->s_端口;
pent=getprotobyname(“pop3”);
if(pent==NULL)
err(“getprotobyname”);
hent=gethostbyname(远程);
printf(“主机:%s\n”,hent->h\u名称);
printf(“IP:%s\n”,inet\u ntoa(*(地址中的结构)hent->h\u addr));
addr.sin_family=AF_INET;
addr.sinu端口=端口;
addr.sin\u addr=*((地址中的结构)hent->h\u addr);
memset(地址为零,'\0',8);
sock=socket(AF\u INET,sock\u STREAM,pent->p\u proto);
if(sock<0)
错误(“套接字”);
结果=连接(sock,(struct sockaddr*)和addr,sizeof(struct sockaddr));
如果(结果<0)
错误(“连接”);
}
在使用任何Winsock函数之前,必须先添加。完成后,你必须打电话

示例(来自msdn):

WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsaData);

if (err != 0)
{
    return 1;
}

//Do stuf here

WSACleanup();

可能有帮助吗?@Vincent谢谢,至少它链接正确,但程序返回失败,返回时间为
getservbyname()
…尝试获取一些扩展错误信息。它给我
100931
代码,这是
wsanotinizated
@Vincent好的,我已经设法创建了一个解决方案,我会在整个程序运行后尽快上传。谢谢你的帮助,回答我的问题,我会投你一票。