POP3 서버에 간단하게 연결하고 대기중인 메시지 수를 얻는 방법을 찾는데 적어도 지난 2 시간을 보냈습니다. C#에서는 쉽게 할 수 없지만 리눅스에서는 C++에서 매우 기본적인 것처럼 보입니다. Windows에서 작동하도록 만드는 방법에 대한 약간의 튜토리얼을 찾을 수 없습니다.POP3 서버 - 원시 C++의 기본 클라이언트 작업
타사 라이브러리를 사용하고 싶지 않습니다. 단순한 콘솔 프로그램을 코딩하고, 원시 C++ 만 사용하여 위에서 설명한대로 기본적인 작업을 수행하고 싶습니다. 제가 공부하려고 시도한 모든 자료는 다음과 같습니다 :
POP3 is a protocol that has somethng to do with emails and it's very simple. Now let's proceed to writing a multi-platform POP3 server-client application, using a F16 fighter jet and inventing a time machine in progress
. 나는 (일부 도움) 리눅스에서 작동해야하는 간단한 조각 작성한
난 그냥 어떤 간단한 솔루션을 찾을 수 없습니다
... - 적어도 튜토리얼에 따라; 나는 그것을 지금 확인할 방법이 없다. Hovewer, 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");
}
[이 (https://social.msdn.microsoft.com/Forums/vstudio/en-US/cfefa4a5-1f1a-4987-8bc7 -f3197cb5826c/how-to-link-ws232lib? forum = vcgeneral) 도움이 될까요? – Vincent
@Vincent 감사합니다. 적어도 제대로 연결되었지만 getservbyname()에서 프로그램 반환이 실패합니다 ... –
['WSAGetLastError'] 시도 (http://msdn.microsoft.com/en-us/library/ windows/desktop/ms741580 (v = vs.85) .aspx)을 사용하여 확장 된 오류 정보를 얻을 수 있습니다. – Vincent