繁体   English   中英

从套接字读取消息挂起

[英]Reading message from socket hangs

我正在尝试使用TCP连接到pop3邮件服务器,但是当我尝试在connect()之后立即read()消息时,控制台只会挂起。

int sd;
struct sockaddr_in server;

if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    perror ("Error: socket()\n");
    return errno;
}

server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr(ADDR);
server.sin_port = htons(PORT);

if (connect(sd, (struct sockaddr *) &server, sizeof(struct sockaddr)) == -1) {
    perror("Error: connect()\n");
    return errno;
}

char message[100];
read(sd, message, 100); // <== here it hangs
printf ("message: %s\n", message);

close (sd);

其中ADDR是ip, PORT是我要连接的服务器的端口(在我的情况下为188.125.69.47和995)。 根据我在RFC中阅读的内容,在connect()我应该收到以下消息:

+OK hello from ....

您的读取没有任何收益,因为服务器未发送任何数据。 没错,在POP3服务器中应该首先向您发送问候消息,但是当您通过端口995连接到POP3时 ,首先需要建立SSL会话。 但是,这需要客户端进行初始握手

您将需要一个库来建立SSL连接,然后使用POP3进行通信,例如OpenSSL

这个问题的答案也可能会有所帮助: 如何在C中通过SSL使用POP3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM