试图通过C ++中的套接字进行连接,但没有成功

Trying to make a connect go gmail imap through sockets in c++ but without success

本文关键字:连接 成功 套接字      更新时间:2023-10-16

我正在尝试通过 C++ 中的套接字连接到 Gmail...我似乎没有让Gmail回复* OK消息

这是我的代码


#include "stdafx.h" #include "Client.h" #include <WinSock2.h> #include <Windows.h> #include <iostream> #define SCK_VERSION1 0x0101 //version 1 of winsock #define SCK_VERSIOM2 0x0202 //version 2 of winsock using namespace std; int _tmain(int argc, _TCHAR* argv[]) { long Successful; WSAData WinSockData; WORD DLLVERSION=MAKEWORD(2,1); Successful=WSAStartup(DLLVERSION,&WinSockData); char MESSAGE[1024]="",MESSAGE1[1024]=""; SOCKADDR_IN ADDRESS; SOCKET Sock; Sock=socket(AF_INET, SOCK_STREAM, IPPROTO_IP);//socket(AF_INET,SOCK_STREAM,NULL); struct hostent *host; host=gethostbyname("smtp.gmail.com"); ADDRESS.sin_addr.s _addr=*((unsigned long *)host->h_addr_list[0]);//inet_addr(Ip); ADDRESS.sin_family=AF_INET; ADDRESS.sin_port=htons(993); cout<<"connecting..."<<endl; if(connect(Sock,(SOCKADDR*) &ADDRESS,sizeof(ADDRESS))!=0){ cout<<WSAGetLastError()<<endl; //if there was an error then print it out } else{ cout<<"connected"<<endl; int DataEnd=0; do{ long Successful=recv(Sock,MESSAGE1,sizeof(MESSAGE1)/sizeof(char),NULL); //the listen if he got all strcat_s(MESSAGE,MESSAGE1); cout<<MESSAGE1; for(int i=0;i<1024;i++){ if(MESSAGE[i]==''){ DataEnd=1; break; } } }while(DataEnd==0); cout<<MESSAGE<<endl; for(int i=0;i<=(int)strlen(MESSAGE);i++){ MESSAGE[i]=''; } Successful= send(Sock,"a1 login mail@gmail.com passrn",(int)strlen("a1 login mail@gmail.com passrn"),NULL); DataEnd=0; do{ long Successful=recv(Sock,MESSAGE1,sizeof(MESSAGE1)/sizeof(char),NULL); //the listen if he got all strcat_s(MESSAGE,MESSAGE1); for(int i=0;i<1024;i++){ if(MESSAGE[i]==''){ DataEnd=1; break; } } }while(DataEnd==0); cout<<MESSAGE<<endl; for(int i=0;i<=(int)strlen(MESSAGE);i++){ MESSAGE[i]=''; } Successful= send(Sock,"a2 SELECT INBOXrn",(int)strlen("a2 SELECT INBOXrn")+1,NULL); DataEnd=0; do{ long Successful=recv(Sock,MESSAGE1,sizeof(MESSAGE1)/sizeof(char),NULL); //the listen if he got all strcat_s(MESSAGE,MESSAGE1); for(int i=0;i<1024;i++){ if(MESSAGE[i]==''){ DataEnd=1; break; } } }while(DataEnd==0); cout<<MESSAGE<<endl; for(int i=0;i<=(int)strlen(MESSAGE);i++){ MESSAGE[i]=''; } system("PAUSE"); } cout<<endl; system("PAUSE"); return 0; }

但我得到的输出是

连接。。。 连接

然后它阻止在这里...似乎Gmail没有回复"* OK"消息 我做错了什么

两个问题:

  1. 您正在连接到smtp.gmail.com,它不托管 IMAP 服务。 你需要imap.gmail.com.
  2. 端口 993 受 TLS 保护。 您将需要使用安全套接字来连接到它。 使用普通套接字连接不会得到任何东西,因为它正在等待您进行SSL/TLS协商。