C |套接字不接受通过 telnet 的连接 [关闭]

Posted

技术标签:

【中文标题】C |套接字不接受通过 telnet 的连接 [关闭]【英文标题】:C | socket not accepting connection via telnet [closed] 【发布时间】:2018-12-13 07:43:13 【问题描述】:

首先,这是我的代码:

#include "database.h"
#include "pop3.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>

#define PORT 1234

DBRecord fbPopHost =  "host", "pop3", "localhost" ;
DBRecord fbPopPort =  "port", "pop3", "8110" ;


int main(void) 
    int pop3socket;
    int clientSocket;
    int len;
    int binden;
    int zuhoeren;

    struct sockaddr_in mailserver;

    /* Socket erstellen */
    pop3socket = socket(AF_INET, SOCK_STREAM, 0);
    if(pop3socket < 0) 
        perror("Fehler beim Erstellen des Sockets!");
    

    /* IP und Port festlegen mithilfe von Bind */
    memset(&mailserver, 0, sizeof(mailserver)); 
    mailserver.sin_family = AF_INET;
    mailserver.sin_addr.s_addr = htonl(INADDR_ANY);
    mailserver.sin_port = htons(1234);
    binden = (pop3socket, (struct sockaddr*)&mailserver, sizeof(mailserver));
    if(binden < 0) 
        perror("Fehler beim Binden des Sockets");
    

    /* Warteschlange einrichten */
    zuhoeren = listen(pop3socket, 5);
    if(zuhoeren == -1) 
        perror("Fehler beim Listen");
    

    /* Verbindung(en) akzeptieren */
    struct sockaddr_in pop3client; /* Client Infos */

    for(;;) 
        len = sizeof(struct sockaddr);
        clientSocket = accept(pop3socket, (struct sockaddr*)&pop3client, &len);
        if(clientSocket < 0) 
            perror("Fehler beim Accepten der Verbindung");
        
        process_pop3(clientSocket);
    



当我尝试通过 telnet 打开连接时:

远程登录本地主机 1234

悲哀地说:

正在尝试 127.0.0.1... telnet:无法连接到远程主机: 连接被拒绝

当我启动程序时,它会监听连接,所以我不知道出了什么问题。有人可以帮帮我吗,这越来越令人沮丧了?

感谢您的帮助!

【问题讨论】:

附带说明,您有一堆对perror 的调用,它们是机器人,后跟exit 或其他一些错误处理例程。换句话说,你的程序可能会报告一个错误,然后像什么都没发生一样继续。 我知道,但还是谢谢你 :) 【参考方案1】:

你应该在这一行调用bind()

binden = (pop3socket, (struct sockaddr*)&mailserver, sizeof(mailserver));

:-)

【讨论】:

天啊.. 非常感谢 :,)

以上是关于C |套接字不接受通过 telnet 的连接 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

多个套接字覆盖自身

强制 telnet 客户端进入字符模式

如何在 php 中将 Ctrl+c 发送到 telnet 套接字?

c TCP中的套接字我如何测试连接?

通过接受关闭另一个线程中使用的套接字有啥风险?

虽然没有来自客户端的连接操作,但服务器尝试接受连接并因“非套接字上的套接字操作”而失败