丙 |套接字不接受通过 telnet 的连接
C | socket not accepting connection via telnet
首先,这是我的代码:
#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 打开连接时:
telnet localhost 1234
它悲伤地说:
Trying 127.0.0.1... telnet: Unable to connect to remote host:
Connection refused
当我启动程序时,它会监听连接,所以我不知道出了什么问题。有人可以帮助我吗,它越来越令人沮丧?
感谢您的帮助!
您实际上应该在这一行中调用 bind()
:
binden = (pop3socket, (struct sockaddr*)&mailserver, sizeof(mailserver));
:-)
首先,这是我的代码:
#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 打开连接时:
telnet localhost 1234
它悲伤地说:
Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused
当我启动程序时,它会监听连接,所以我不知道出了什么问题。有人可以帮助我吗,它越来越令人沮丧?
感谢您的帮助!
您实际上应该在这一行中调用 bind()
:
binden = (pop3socket, (struct sockaddr*)&mailserver, sizeof(mailserver));
:-)