2013-01-15 127 views
11

我剛開始學習套接字(Linux)的基礎知識。我嘗試了一個小例子,但它不起作用,我不知道什麼是錯的。套接字錯誤:連接被拒絕 - 我做錯了什麼?

我收到「Connection Refused」錯誤消息。


這裏是我的代碼:

#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); 
} 

編輯

當然!該錯誤實際上是在服務器中。我簡單地發現它弄明白客戶發送了這個消息,所以我縮小了我的觀點,甚至不屑於回頭看服務器。

由於錯誤似乎也是在我的服務器,這樣我可能會問一個問題,在這裏將它鏈接

服務器是聽(12345)...

+2

您是否編寫了偵聽端口1234的程序?嘗試執行nc -l 127.0.0.1 1234以獲取偵聽器。 – fuz

回答

10

按照man page

ECONNREFUSED No-one listening on the remote address.


爲了提供接受你的連接,併發送回接收到的數據(回聲服務器)一個簡單的遠程端點,你可以嘗試這樣的事情python server(或使用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

大概沒有服務器偵聽端口1234在本地主機

+0

我該如何解決這個問題?我大麥瞭解這些東西 – Kalec

+0

您需要編寫一個程序,即監聽端口1234的「服務器」,並在運行客戶端之前在本地盒子中運行它。 – 2013-01-15 19:02:32

4

你的答案是:你的程序是客戶端,它需要一個服務器來連接。 nc命令創建服務器,您的程序可以連接到它。

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