2013-01-15 21 views
11

Ho appena iniziato a imparare le basi dei socket (Linux). Ho provato la mia mano ad un piccolo esempio, ma non funziona e non ho idea di cosa non funzioni.Errore socket: connessione rifiutata - cosa sto facendo male?

Viene visualizzato un messaggio di errore "Connessione rifiutata".


Ecco il mio codice:

#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netinet/ip.h> 
#include <stdio.h> 
#include <string.h> 
#include <errno.h> 

int main() { 
    int c; 
    c = socket(AF_INET, SOCK_STREAM, 0); 
    if (c < 0) { 
     printf("Error in creating socket! %s\n", strerror(errno)); 
     return 1; 
    } 

    struct sockaddr_in server; 
    memset(&server, 0, sizeof(server)); 
    server.sin_port = htons(1234); 
    server.sin_family = AF_INET; 
    server.sin_addr.s_addr = inet_addr("127.0.0.1"); //local host 
    if (connect(c, (struct sockaddr *)&server, sizeof(server)) < 0) { 
     // Here is my error 
     printf("Error when connecting! %s\n",strerror(errno)); 
     return 1; 
    } 

    while(1) { 
     char msg[100]; 
     printf("Give message: "); 
     fgets(msg, sizeof(msg), stdin); 
     send(c, &msg, sizeof(msg), 0); 
     char resp[100]; 
     recv(c, &resp, sizeof(resp), 0); 
     printf("Received: %s\n", resp); 
    } 
close(c); 
} 

EDIT

Certo! l'errore era in realtà nel server. Ho semplicemente scoperto che il client ha inviato il messaggio, quindi ho ristretto il mio punto di vista, non mi sono nemmeno preoccupato di guardare indietro al server.

Dal momento che l'errore sembra essere anche nel mio server, potrei finire per chiedere un'altra domanda e il collegamento qui

Server stava ascoltando (12345) ...

+2

Hai scritto un programma che è in ascolto sulla porta 1234? Prova ad eseguire nc -l 127.0.0.1 1234 prima di avere un listener. – fuz

risposta

10

Secondo il man page:

ECONNREFUSED No-one listening on the remote address.


Al fine di fornire un semplice telecomando endpoint che accetta la connessione e restituisce i dati ricevuti (server eco), si potrebbe provare qualcosa di simile python server (o per usare netcat):

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("localhost", 1234)) 
s.listen(1) 
conn, addr = s.accept() 
print 'Connected by', addr 
while 1: 
    data = conn.recv(1024) 
    if not data: break 
    conn.sendall(data) 
conn.close() 
2

probabilmente nessun server in ascolto porta 1234 nel vostro host locale

+0

E come posso risolvere quello? Ho capito alcune di queste cose, – Kalec

+0

, è necessario scrivere un programma, ad esempio "il server" che ascolta la porta 1234 ed eseguirlo nella casella locale, prima di eseguire il client. –

4

la vostra risposta è : Il programma è client e richiede un server per la connessione. Il comando nc crea il server e il tuo programma può collegarsi ad esso.

[[email protected] work]# nc -l 127.0.0.1 1234 & 
[1] 25380 
[[email protected] work]# ./socket 
Give message: Hello 
Hello 
Problemi correlati