gpt4 book ai didi

c++ - POP3 服务器 - 原始 C++ 中的基本客户端操作

转载 作者:行者123 更新时间:2023-11-28 06:34:11 26 4
gpt4 key购买 nike

我花了至少 2 个小时来寻找一种方法来建立到 POP3 服务器的简单连接并获取等待它的消息数。由于它在 C# 中非常简单,在 Linux 上的 C++ 中看起来非常基础,所以我什至找不到关于如何使其在 Windows 上运行的最细微教程。

我不想使用任何第三方库 - 我只想编写一个简单的控制台程序,只使用原始 C++,只是为了做一些如上所述的基本事情。我尝试研究的所有资源如下:

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

我似乎找不到任何简单的解决方案...

我已经(在一些帮助下)编写了一个应该在 linux 上工作的简单片段 - 至少根据教程;我现在没有办法检查它。然而,C++ 不是我的“母语”,当我尝试将它转移到 Windows 中时,我只是从一个洞掉进了另一个洞,不得不再花一刻钟 GGoogle 寻找解决方案。

此时,代码正在编译,但链接器失败。很奇怪,因为我已经将 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");
}

最佳答案

您必须添加 WSAStartup在使用任何 Winsock 函数之前。完成后,您必须调用 WSACleanup .

示例(来自 msdn):

WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);

err = WSAStartup(wVersionRequested, &wsaData);

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

//Do stuf here

WSACleanup();

关于c++ - POP3 服务器 - 原始 C++ 中的基本客户端操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com